1. 程式人生 > >Android學習筆記:Activity-Spinner

Android學習筆記:Activity-Spinner

例子一:Spinner的基本實現方法

步驟一:編寫Android XML檔案

<LinearLayout …… >
  <TextView android:id="@+id/spinner_label" …… />
   <!-- 經過我們的測試android:drawSelectorOnTop="true | false"不起作用,因此此引數可以不設定 -->
   <Spinner android:id="@+id/spinner"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"  />
</LinearLayout>

步驟二:原始碼

1)設定Spinner之中的元素內容,採用了ArrayAdapter來描述,並通過setApdater()來設定adapter

private String[] items=   {"lorem", "ipsum", "dolor", "sit", "amet",….
ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items); //第二個引數表示spinner沒有展開前的UI型別
spin.setAdapter

(aa); //之前已經通過Spinner spin = (Spinner) findViewById(R.id.spinner);來獲取spin物件

2)設定spinner展開的方式,在上面,我們將通過設定ArrayAdapter的第二個引數,設定了spinner沒有展開前的UI格式,simple_spinner_item是textview的label方式,而simple_spinner_dropdown_item這是點選圓圈選擇方式。在這個例子中,我們將展開方式設定為點選圓圈選擇,如圖所示。關於格式,我們會在第二個例子中進行試驗。

aa.setDropDownViewResource

(android.R.layout.simple_spinner_dropdown_item);

3)使用setOnItemSelectedListener()來設定Spinner的點選觸發的callback函式,有onItemSelected和onNothingSelected兩個介面需要具體給出。

public class SpinnerTest extends Activity implements OnItemSelectedListener{

   protected void onCreate(Bundle savedInstanceState) {
        ……
        spin.setOnItemSelectedListener(this);
        … …
    }
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,  long arg3) {
        // TODO Auto-generated method stub
        label.setText(items[arg2]); //label是我們設定的第一個TextView widget,arg2就是元素的pos需要
       
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
        label.setText("");
    }      
}

例子二:Spinner的UI格式

步驟一:編寫Android XML檔案

在例子來自Android官方網站的tutorial的例子。我們下載SDK的文件中也帶有,可以本地檢視。這裡我們希望item的元素內容設定都在XML中定義,方便修改以及多國語言版本的實現。

在strings.xml中

<resources>
    <string name="planet_prompt">太陽系行星:</string>
    <string-array name="planets_arry">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

在layout的xml中:

<LinearLayout … >
  <TextView … />
  <Spinner android:id="@+id/spinner4"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:prompt="@string/planet_prompt" />
</LinearLayout>

在Spinner中,我們設定了prompt,根據@string在strings.xml中查詢,prompt的內容為“太陽系行星:”在我們點選展開Spinner中,我們可以看到在最上面增加了提示,如上圖所示。

步驟二:編寫原始碼

1)設定spinner的adapter,並匯入資料,以及設定UI格式。

Spinner spin=(Spinner)findViewById(R.id.spinner4);
//createFromResouce將返回ArrayAdapter<CharSequence>,具有三個引數:
//第一個是conetxt,也就是application的環境,可以設定為this,也可以通過getContext()獲取.
//第二個引數是從data source中的array ID,也就是我們在strings中設定的ID號;
//第三個引數是spinner未展開的UI格式
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.planets_arry, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(adapter);

在ArrayApdater中我們設定了為展開的方式,android提供了兩種格式,當然我們也可以通過Android XML檔案進行設定,如同ListView一樣,下圖分別是設定android.R.layout.simple_spinner_item和android.R.layout.simple_spinner_dropdown_item的顯示,一般而言,我們都會顯示前者。

 

如果我們不通過setDropDownViewResource進行設定,則展開的方式預設同未展開的方式,否則必須進行設定,下圖分別是設定android.R.layout.simple_spinner_item和android.R.layout.simple_spinner_dropdown_item。可以看出在下面左邊的途中,展開和未展開的設定是不一樣的。

 

2)設定回撥函式

這裡採用了一個類來描述回撥處理

public class MyOnItemSelectedListener implements OnItemSelectedListener{
    @Override
    public void onItemSelected(AdapterView<?> parent, View arg1, int pos, long arg3){
        // 在這裡我們複習一下Toast的用法 
        Toast.makeText(parent.getContext(),
                                  "The planet is "+  parent.getItemAtPosition(pos).toString(),
                                   Toast.LENGTH_LONG).show();
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) { 
        //nothing to do
    }
}

在程式中使用spin.setOnItemSelectedListener(new MyOnItemSelectedListener());來設定回撥物件即可。

例子三:自定義格式和資料

在上面的例子中,為展開和展開後的UI格式採用了Android自定義的格式,都可以自行定義。

ArrayAdapter adapter = new ArrayAdapter(this,R.layout.item,R.id.textView,list);

在上面的例子中,我們使用某個ArrayAdapter的建構函式,其中第一個引數是context,第二個引數指定下來選單的每個條目的樣式,第三個引數指定了在每個條目樣式中用於顯示資料的TextView的Id,第四個引數為列表的資料來源(可以是任何格式,toString()就是相應的賦值)。