组件的使用(一)Spinner的使用

来源:互联网 发布:c语言转换汇编语言 编辑:程序博客网 时间:2024/06/11 09:38

Spinner即下拉菜单。

基本使用

在android中实现Spinner组件需要以下三个步骤:

1.在XML文件中定义标签Spinner

<Spinner  android:id="@+id/spinner"  android:layout_width="match_parent"  android:layout_height="wrap_content"  <!--其它属性略-->  />

2.在Strings.xml文件中声明items

<resources>  <string name="item1">Item1</string>  <string name="item2">Item2</string>  <string name="item3">Item3</string>  <!--其它item省略--></resources>

3.Java代码实现Controller
我们需要BaseAdapter将字符串数据传给Spinner UI组件,而实现BaseAdapter必须覆盖一些方法。
代码片示例:

//数据域Spinner spinner;int[] messageIds={R.string.item1,R.string.item2,R.string.item3};//下拉菜单spinner的items资源        //覆盖onCreate()方法        @Override        public void onCreate(Bundle savedInstanceState) {            this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏            super.onCreate(savedInstanceState);            setContentView(R.layout.register);            processSpinner();//处理下拉菜单spinner        }        //此方法用于处理下拉列表spinner        private void processSpinner(){            spinner=(Spinner)findViewById(R.id.spinner);            //adapter 作为spinner的适配器            BaseAdapter baseAdapter=new BaseAdapter() {                @Override                public View getView(int position, View convertView, ViewGroup parent) {                    TextView spinnerItemTextView=new TextView(Register.this);                    spinnerItemTextView.setText("    "+getResources().getText(messageIds[position]));                    spinnerItemTextView.setTextColor(Color.BLACK);                    spinnerItemTextView.setTextSize(16);                    return spinnerItemTextView;                }                @Override                public long getItemId(int arg0) {                    // TODO Auto-generated method stub                    return 0;                }                @Override                public Object getItem(int arg0) {                    // TODO Auto-generated method stub                    return null;                }                @Override                public int getCount() {                    // TODO Auto-generated method stub                    return 3;                }            };            spinner.setAdapter(baseAdapter);//为spinner设置adapter        }

如果要为Spinner Items设置点击事件的话,可以这么做:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {    @Override    public void onItemSelected(AdapterView<?> parent, View view,            int position, long id) {        String str=parent.getItemAtPosition(position).toString();        Toast.makeText(SpinnerActivity.this, "你点击的是:"+str, 2000).show();    }    @Override    public void onNothingSelected(AdapterView<?> parent) {        // TODO Auto-generated method stub    }});

注意:
其实,String资源也可以写成另一种形式:

<string-array name="spinnername">        <item>北京</item>        <item>上海 </item>        <item>广州</item>        <item>深圳</item>    </string-array>

对应的java代码中是建立String数组而不是String ID数组。

// 建立String数组存储Spinner数据String[] mItems = getResources().getStringArray(R.array.spinnername);

附:

BaseAdapter的使用

——————————————————————————————————————————————–

改变风格

笔者在用BaseAdapter时出现了如下问题:
生成的下拉列表item的分割线是黑的,看起来很难看。leader让改掉颜色,但笔者查遍api,并无设置此颜色的方法。最后百度到有同学遇到和我一样的问题。结果采用人家的方法,就ok了。
方法是修改当前Activity的主题。
具体:
1.在styles.xml文件下自定义分割线风格。
示例:

<style name="mySpinnerStyle" parent="android:style/Widget.ListView.DropDown">        <item name="android:divider">#000000</item>        <item name="android:dividerHeight">2dp</item>    </style>

2.在styles文件的名叫AppTheme的style标签中声明上面刚刚定义的风格。
示例:

<style name="AppTheme" parent="AppBaseTheme">        <!-- All customizations that are NOT specific to a particular API-level can go here. -->        <item name="android:dropDownListViewStyle">@style/mySpinnerStyle</item>    </style>

(其中的 < item > 标签是新声明的)

3.在manifest文件下此activity标签的属性中添加刚刚设置的主题。
示例:

<activity            android:name=".MainActivity"            android:label="@string/app_name"             android:theme="@style/AppTheme">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

(其中android:theme=”@style/AppTheme”这条属性是刚刚添加的)

设置默认选项

使用editText.setSelection(position);
注意:此句应放在setAdapter后面

1 0