Android 自定义Spinner字体、颜色、大小

71 篇文章 1 订阅

昨天在公司项目中遇到Spinner颜色,字体,大小的困惑。所以今天也总结一下这方面知识。这个其实很简单,要改变字体,颜色以及大小,无非就是不要用系统自带的样式。自已例外写一个layout调用就行了。我就是这样做的。本文例子还有Spinner两种弹出方式,下拉框以及弹出框。加载数据源的两种方式。下面看代码介绍。

package com.example.customspinerdemo;
 
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnItemSelectedListener {
 
    private Spinner mspinner1;
    private Spinner mspinner2;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mspinner1 = (Spinner) findViewById(R.id.spinner1);
        if (mspinner1 != null) {
            mspinner1.setOnItemSelectedListener(this);
        }
 
        mspinner2 = (Spinner) findViewById(R.id.spinner2);
        if (mspinner2 != null) {
            mspinner2.setOnItemSelectedListener(this);
        }
 
        // 在这里两个layout自已定义效果,不用系统自带.
        // 数据源手动添加
        ArrayAdapter<String> spinnerAadapter = new ArrayAdapter<String>(this,
                R.layout.custom_spiner_text_item, getDataSource());
        spinnerAadapter
                .setDropDownViewResource(R.layout.custom_spinner_dropdown_item);
        mspinner1.setAdapter(spinnerAadapter);
 
        // 通过加载xml文件配置的数据源
        ArrayAdapter spinnerAadapter2 = ArrayAdapter.createFromResource(this,
                R.array.spiner2_array, R.layout.custom_spiner_text_item);
        spinnerAadapter2
                .setDropDownViewResource(R.layout.custom_spinner_dropdown_item);
        mspinner2.setAdapter(spinnerAadapter2);
    }
 
    public List<String> getDataSource() {
        List<String> spinnerList = new ArrayList<String>();
        spinnerList.add("北京");
        spinnerList.add("上海");
        spinnerList.add("广州");
        spinnerList.add("北京");
        spinnerList.add("上海");
        spinnerList.add("广州");
        return spinnerList;
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        if (arg0.getId() == R.id.spinner1) {
            String itemString = mspinner1.getItemAtPosition(arg2).toString();
            Toast.makeText(this, "你选中的是" + itemString, Toast.LENGTH_SHORT)
                    .show();
            return;
        } else if (arg0.getId() == R.id.spinner2) {
            String itemString2 = mspinner2.getItemAtPosition(arg2).toString();
            Toast.makeText(this, "你选中的是" + itemString2, Toast.LENGTH_SHORT)
                    .show();
            return;
        }
    }
 
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
 
    }
 
}

custom_spiner_text_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textViewCustom"
    style="?android:attr/spinnerItemStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:textAlignment="inherit"
    android:textColor="#222288"
    android:textSize="16sp" />


custom_spinner_dropdown_item.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/checkedTextViewCustom"
    style="?android:attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:ellipsize="marquee"
    android:singleLine="true"
    android:textAlignment="inherit"
    android:textColor="#222288"
    android:textSize="16sp" />


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="center_vertical" >
 
        <TextView
            android:id="@+id/textView1"
            android:layout_width="116dp"
            android:layout_height="wrap_content"
            android:text="自定义下拉框:"
            android:textSize="16sp" />
 
        <Spinner
            android:id="@+id/spinner1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical" >
 
        <TextView
            android:id="@+id/textView2"
            android:layout_width="116dp"
            android:layout_height="wrap_content"
            android:text="自定义弹出框:"
            android:textSize="16sp" />
 
        <Spinner
            android:id="@+id/spinner2"
            android:layout_width="202dp"
            android:layout_height="wrap_content"
            android:spinnerMode="dialog" />
    </LinearLayout>
 
</LinearLayout>

在xml里面配置Spinner时默认是下拉框的。

如果要换成弹出框加上这个android:spinnerMode="dialog"

以其他监听触发spinner语句:mspinner.performClick();


————————————————
转载于:https://blog.csdn.net/qq_16064871/article/details/44992565

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值