修改Android中Spinner的显⽰及下拉样式的四种⽅法
最近⽤到Android中Spinner控件,搜了⼀下,⽹上⽂章要么语焉不详,要么只提到部分⽅法,着实不便。根据⾃⼰的使⽤经验,在此略作汇总(转载请注明出处)。(⽰例代码已经全部测试⽆误,可惜不能附加⽂件供下载)
修改Spinner的显⽰及下拉样式,先可以分为Spinner控件被加载前的静态设置和加载后的动态设置两类。
所谓加载前的静态设置也可以分成两种。⼀种(后⽂称A⽅法)就是最简单、最直接地在Layout的xml⽂件中设置属性值;另外⼀种(后⽂称B⽅法)就是先设计好Spinner将要使⽤的显⽰和下拉样式(XML⽂件),在⽣成Spinner将要加载的Adapter后,将XML⽂件指定给Adapter使⽤(如果不指定,Adapter将⾃动使⽤系统默认样式)。
所谓加载后的动态设置也可以分成两种。⼀种(后⽂称C⽅法)是⾃⼰编写Spinner将要加载的Adapter类,在⾃⼰的Adapter类⽅法中动态修改显⽰和下拉样式;另外⼀种(后⽂称D⽅法)就是直接在Spinner的事件中修改显⽰和下拉样式。
在分别掌握以上四种⽅法之后,如果能融会贯通,联合使⽤四种⽅法,可以设计出相当强⼤的效果哦。
下⾯对以上四种⽅法分别详细说明,⽂中引⽤部分代码说明。
A⽅法:
⽰例说明:显⽰⼀个Spinner控件,下拉背景颜⾊为绿⾊,显⽰背景为蓝⾊,其它属性就不多说了,⾃⼰查API说明吧。
Layout XML ⽂件:
<RelativeLayout xmlns:android="schemas.android/apk/res/android"    xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/myTextViewA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5sp"
android:text="A⽅法: " />
<Spinner
android:id="@+id/mySpinnerA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/myTextViewA"
android:background="@color/LIGHT_BLUE"
android:popupBackground="@color/LIGHT_GREEN" />
</RelativeLayout>
JAVA代码:
FixDataProvider 类:
ample.spinnerdemo;
import java.util.ArrayList;
import java.util.List;
public class FixDataProvider {
public static List<String> GetTenNumberList() {
// Create a List<String> for 0,1,2 (9)
List<String> list = new ArrayList<String>();
list.add("");
list.add("0");
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
return list;
}
}
MainActivity类:
ample.spinnerdemo;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class MainActivity extends Activity {
private Spinner mSpinnerA, mSpinnerB, mSpinnerC, mSpinnerD;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
mSpinnerA = (Spinner) this.findViewById(SpinnerA);
this.loadDataForSpinnerA();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().u.main, menu);
return true;
}
private void loadDataForSpinnerA() {
List<String> spinnerList = FixDataProvider.GetTenNumberList();
ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerList); this.mSpinnerA.setAdapter(myAdapter);
}
}
注意:ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, spinnerList);是使⽤默认⽅式。
B⽅法:
⽰例说明:显⽰⼀个Spinner控件,下拉背景颜⾊为绿⾊,⽂字为橙⾊,显⽰背景为蓝⾊,⽂字为⽩⾊粗斜体。
Layout XML ⽂件:
1)将以下代码添加近l⽂件中以添加演⽰控件
<TextView
android:id="@+id/myTextViewB"
android:layout_below="@id/myTextViewA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5sp"
android:text="B⽅法: " />
<Spinner
android:id="@+id/mySpinnerB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/mySpinnerA"
android:layout_toRightOf="@id/myTextViewB" />
2)新建⼀个spinner_l⽂件,在后⾯的JAVA代码中将设置作为Spinner控件的显⽰样式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="schemas.android/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txtvwSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/LIGHT_BLUE"
android:textColor="@color/WHITE"
android:textStyle="bold|italic"/>
</LinearLayout>
红⾊部分就是设置⾃⼰需要的显⽰样式,当然,读者可以加⼊更多的样式设置。
3)新建⼀个spinner_l⽂件,在后⾯的JAVA代码中将设置作为Spinner控件的下拉样式
<?xml version="1.0" encoding="utf-8"?>textstyle
<LinearLayout xmlns:android="schemas.android/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txtvwSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/LIGHT_GREEN"
android:textColor="@color/ORANGE"
android:textStyle="normal|italic" />
</LinearLayout>
红⾊部分就是设置⾃⼰需要的显⽰样式,当然,读者可以加⼊更多的样式设置。另外,如果改
为android:layout_width="wrap_content",会有不同的下拉效果哦。
注意:spinner_l和spinner_l中的TextView必须使⽤相同的名称,否则,系统会因为不到TextView控件⽽抛出java.lang.NullPointerException错误!为什么会这样,本⼈还没有翻Spinner的源代码细究,有知道的⼤虾吱⼀声,谢谢!
JAVA代码:
MainActivity类:
1)在onCreate函数中加以下语句以获取需要的Spinner控件并执⾏加载数据函数
mSpinnerB = (Spinner) this.findViewById(SpinnerB);
this.loadDataForSpinnerB();

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。