在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 第七章-下拉框Spinner控件
第十八章-ViewPager+FragmentStatePagerAdapter實現仿微信Tab
第十五章-GridView實現動態(tài)添加和刪除子項
第九章-進度條ProgressBar
第十二章-經典的ListView
第十四章-GridView控件
第八章-時間相關控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開關按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動態(tài)添加、刪除及點擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴展(多選、全選、反選)
第四章-玩轉單選和多選按鈕
第十章-可以拖動的ProgressBar-SeekBar
第十九章-Android菜單之選項菜單

第七章-下拉框Spinner控件

Android程序運行在手機上,手機屏幕存在著較大的尺寸局限,怎樣在有限的布局里顯示更多的內容,下拉列表控件可以有效地解決這一問題,主要在信息較固定的場合使用,例如注冊信息時的性別選擇、省份選擇和出生日期選擇等等。首先看一下Spinner的結構:

public class
Spinner
extends AbsSpinner
implements DialogInterface.OnClickListener
java.lang.Object
   ?    android.view.View
       ?    android.view.ViewGroup
           ?    android.widget.AdapterView<T extends android.widget.Adapter>
               ?    android.widget.AbsSpinner
                   ?    android.widget.Spinner

從API文檔給出的繼承結構來看,Spinner類繼承自AbsSpinner,實現了DialogInterface.OnClickListener 接口。Spinner常用屬性有:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/7-1.png" alt="這里寫圖片描述" />

常用方法有:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/7-2.png" alt="這里寫圖片描述" />

下拉列表框中的列表項有兩種配置方式,一種通過布局文件的entries屬性配置,一種在代碼中配置,首先介紹一下如何通過屬性進行配置。

  • 方式一

1.編寫數據源文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="months">
        <item>一月</item>
        <item>二月</item>
        <item>三月</item>
    </string-array>
</resources>

用string-array標簽包裹,每一個item代表一個下拉列表項。

2.布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Spinner
        android:id="@+id/spinner"
        android:entries="@array/months"
        android:layout_width="wrap_content"
        android:spinnerMode="dialog"
        android:prompt="@string/month"
        android:layout_height="wrap_content" />
</RelativeLayout>

布局文件的Spinner標簽中添加了entries屬性,spinnerMode屬性選擇了對話框模式,并設置了其prompt屬性,運行實例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/7-3.png" alt="這里寫圖片描述" />

  • 方式二 通過代碼進行控制,這里以適配器形式設置數據源,并設置了下拉項選擇監(jiān)聽,選擇項目后會Toast選擇了哪一項。

1.布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

2.Activity程序:

public class MainActivity extends Activity {
    private Spinner spinner;
    ArrayAdapter <String> adapter;
    private List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner=(Spinner)findViewById(R.id.spinner);
        spinner.setPrompt("請選擇季節(jié)");
        initDatas();
        adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this,"您選擇的月份是:"+list.get(position),Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

    }

    private void initDatas() {
        list=new ArrayList<String>();
        list.add("春季");
        list.add("夏季");
        list.add("秋季");
        list.add("冬季");

    }
}

這里使用了ArrayAdapter適配器填充了數據源,ArrayAdapter初始化時需要傳入三個參數,分別是上下文對象、顯示布局文件和數據源對象。初始化ArrayAdapter后,調用Spinner的setAdapter方法,設置數據源。調用了setPrompt方法設置提示信息,同時還設置了Spinner子項的選擇監(jiān)聽事件,通過覆寫方法中的position參數,可以確定選擇的是哪一個子項,通過Toast輸出選擇信息。

運行項目實例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/7-4.png" alt="這里寫圖片描述" />

下拉級聯是我們在開發(fā)中經常會遇到的問題,下面結合單選選擇監(jiān)聽,動態(tài)控制下級下拉框內容的渲染,通過一個實例進行說明如何實現這一需求。

1.布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Spinner
        android:id="@+id/spinner_season"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Spinner
        android:id="@+id/spinner_month"
        android:layout_width="wrap_content"
        android:prompt="@string/month"
        android:layout_toRightOf="@+id/spinner_season"
        android:layout_height="wrap_content" />
</RelativeLayout>

2.MainActivity 代碼:

public class MainActivity extends Activity {
    private Spinner spinner_season,spinner_month;
    ArrayAdapter <String> adapter_season,adapter_month;
    private List<String> list_season;
    String   months[][]={{"一月","二月","三月"},{"四月","五月","六月"},{"七月","八月","九月"},{"十月","十一月","十二月"}};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinner_season=(Spinner)findViewById(R.id.spinner_season);
        spinner_month=(Spinner)findViewById(R.id.spinner_month);
        spinner_season.setPrompt("請選擇季節(jié)");
        initDatas();
        adapter_season=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list_season);
        spinner_season.setAdapter(adapter_season);
        spinner_season.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                adapter_month=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,months[position]);//通過二維數組及position的值動態(tài)決定下級菜單的數據源
                adapter_month.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);//設置下拉顯示樣式
                spinner_month.setAdapter(adapter_month);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

    }

    private void initDatas() {
        list_season=new ArrayList<String>();
        list_season.add("春季");
        list_season.add("夏季");
        list_season.add("秋季");
        list_season.add("冬季");

    }
}

這里定義了一個二維數組,在覆寫的onItemSelected方法中根據傳入的position的值動態(tài)決定下級列表框的數據源,從而實現數據級聯的效果。這里還利用Spinner的setDropDownViewResource方法設置了下拉顯示樣式,參考下圖:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/7-5.png" alt="這里寫圖片描述" />