Spinner 提供下拉列表式的輸入方式,該方法可以有效節(jié)省手機(jī)屏幕上的顯示空間。
下面用一個(gè)簡單的實(shí)例講解 Spinner 的使用方法。在工程 WidgetDemo 的布局文件 main.xml 中添加一個(gè) Button,用以啟動 SpinnerActivity。
在 main.xml 中添加代碼如下:
?
- <Button
- android:id="@ id/button4"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="SpinnerDemo"/>
單擊 Button 并啟動 SpinnerActivity 的代碼如下
?
- Button spinnerbtn = (Button) this.findViewById(R.id.button4);
- spinnerbtn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(MainActivity.this, SpinnerActivity.class);
- startActivity(intent);
- }
- });
同時(shí)在 AndroidManifest.xml 文件中聲明該 Activity:
<activity android:name=".SpinnerActivity "></activity>
SpinnerActivity 的運(yùn)行效果如圖 1 所示。
圖 1??Spinner 的應(yīng)用界面
SpinnerActivity 使用的布局文件為 spiner.xml,其代碼如下:
?
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas./apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <TextView
- android:id="@ id/textView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="textview"/>
- <Spinner
- android:id="@ id/spinner1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- </LinearLayout>
SpinnerActivity.java 文件的代碼如下:
?
- package introduction.android.widgetDemo;
- ?
- import java.util.ArrayList;
- import java.util.List;
- ?
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.MotionEvent;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.Spinner;
- import android.widget.TextView;
- ?
- public class SpinnerActivity extends Activity {
- ?
- private List<String> list = new ArrayList<String>();
- private TextView textview;
- private Spinner spinnertext;
- private ArrayAdapter<String> adapter;
- ?
- public void onCreate(Bundle savedlnstanceState) {
- super.onCreate(savedlnstanceState);
- setContentView(R.layout.spiner);
- //第一步:定義下拉列表內(nèi)容
- list.add("A型");
- list.add("B型");
- list.add("O型");
- list.add("AB型");
- list.add("其他");
- textview = (TextView) findViewByld(R.id.textViewl);
- spinnertext = (Spinner) findViewByld(R.id.spinnerl);
- //第二步:為下拉列表定義一個(gè)適配器
- adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
- //第三步:設(shè)置下拉列表下拉時(shí)的菜單樣式
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- //第四步:將適配器添加到下拉列表上
- spinnertext.setAdapter(adapter);
- //第五步:添加監(jiān)聽器,為下拉列表設(shè)置事件的響應(yīng)
- spinnertext.setOnltemSelectedListener(new Spinner.OnltemSelectedListener() {
- public void onltemSelected(AdapterView<?> argO, View argl, int arg2, long arg3) {
- // TODO Auto-generated method stub
- /* 將所選spinnertext的值帶入myTextView中*/
- textview.setText("你的血型是:" adapter.getItem(arg2));
- /* 將 spinnertext 顯示^*/
- argO.setVisibility(View.VISIBLE);
- }
- ?
- public void onNothingSelected(AdapterView<?> argO) {
- // TODO Auto-generated method stub
- textview.setText("NONE");
- argO.setVisibility(View.VISIBLE);
- }
- });
- ?
- //將spinnertext添加到OnTouchListener對內(nèi)容選項(xiàng)觸屏事件處理
- spinnertext.setOnTouchListener(new Spinner.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- // TODO Auto-generated method stub
- // 將mySpinner隱藏
- v.setVisibility(View.INVISIBLE);
- Log.i("spinner", "Spinner Touch事件被觸發(fā)!");
- return false;
- }
- });
- ?
- //焦點(diǎn)改變事件處理
- spinnertext.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
- public void onFocusChange(View v, boolean hasFocus) {
- // TODO Auto-generated method stub
- v.setVisibility(View.VISIBLE);
- Log.i("spinner", "Spinner FocusChange事件被觸發(fā)!");
- }
- });
- ?
- }
- }
SpinnerActivity 通過 5 個(gè)步驟將 Spinner 初始化并進(jìn)行事件處理,分別為:
- 定義下拉列表的列表項(xiàng)內(nèi)容 List<String>。
- 為下拉列表 Spinner 定義一個(gè)適配器 ArrayAdapter<String> ,并與列表項(xiàng)內(nèi)容相關(guān)聯(lián)。
- 使用 ArrayAdapter.setDropDownViewResource() 設(shè)置 Spinner 下拉列表在打開時(shí)的下拉菜單樣式。
- 使用 Spinner. setAdapter() 將適配器數(shù)據(jù)與 Spinner 關(guān)聯(lián)起來。
- 為 Spinner 添加事件監(jiān)聽器,進(jìn)行事件處理。
在本實(shí)例中,SpinnerActivity 在程序代碼中動態(tài)建立了下拉列表每一項(xiàng)的內(nèi)容。除此之外,還可以在 XML 文件中定義 Spinner 的下拉列表項(xiàng),步驟如下。
1)在 res/values 文件夾下新建 cities.xml 文件夾:
?
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string-array name="city">
- <item>A型</item>
- <item>B型</item>
- <item>AB型</item>
- <item>O型</item>
- <item>其他</item>
- </string-array>
- </resources>
2)在 SpinnerActivity.java 中初始化 Spinner:
?
- Spinner spinner=(Spinner)findViewById(R.id.spinner1);
- ArrayAdapter<CharSequence> adapter=ArrayAdapter.createF
- romResource(this, R.array.city,android.R.layout.simple_spinner_item);
- adapter.setDropDownViewResource
- (android.R.layout.simple_spinner_dropdown_item);
- spinner.setAdapter(adapter);
來源:https://www./content-4-327351.html
|