日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UI组件之AdapterView及其子类(三)Spinner控件详解

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UI组件之AdapterView及其子类(三)Spinner控件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spinner提供了從一個數據集合中快速選擇一項值的辦法。默認情況下Spinner顯示的是當前選擇的值,點擊Spinner會彈出一個包含所有可選值的dropdown菜單或者一個dialog對話框,從該菜單中可以為Spinner選擇一個新值。

這篇文章中我將討論

1.Spinner的基本用法?

2.Spinner的xml屬性

3.設置Spinner的Adapter (antries屬性,arrayadapter 和自定義BaseAdapter)?


最簡單的Sipnner用法是使用spinner的android:antries屬性直接使用arrays數組資源,顯示一個下拉列表

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- 這個spinner由entries提供值 --><Spinnerandroid:id="@+id/spinner1"android:layout_width="match_parent"android:layout_height="wrap_content"android:dropDownWidth="200dp"android:entries="@array/province"android:prompt="@string/promp" /> </LinearLayout>其中android:entries="@array/province"表示Spinner的數據集合是從資源數組 province中獲取的, province數組資源定義在values/arrays.xml中:

<?xml version="1.0" encoding="utf-8"?> <resources><string-array name="province"><item >湖南省</item><item >湖北省</item><item >北京市</item><item >上海市</item> </string-array></resources>

當然,一般情況下我們是需要響應Spinner選擇事件的,可以通過OnItemSelectedListener的回調方法實現

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Spinner spinner = (Spinner) findViewById(R.id.spinner1);spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {String[] languages = getResources().getStringArray(R.array.languages);Toast.makeText(MainActivity.this, "你點擊的是:"+province[pos], 2000).show();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {// Another interface callback}});}}
2.Spinner的xml屬性


android:entries: 直接在xml布局文件中綁定數據源(可以不設置,即可以在Activity中動態綁定)

android:prompt:在Spinner彈出選擇對話框(?android:prompt="西游記人物")的時候對話框的標題:


android:spinnerMode: Spinner的顯示形式,它的值只有“dialog”和“dropdown”兩種,對話框和下拉列表的形式

android:dropDownHorizontalOffset(setDropDownHorizontalOffset(int)):spinnerMode=”dropdown”時,下拉的項目選擇窗口在水平方向相對于Spinner窗口的偏移量

android:dropDownVerticalOffset(setDropDownVerticalOffset(int)):spinnerMode=”dropdown”時,下拉的項目選擇窗口在垂直方向相對于Spinner窗口的偏移量。還可以引用一個資源(格式:@[package:]type:name)或者是包含這種類型值的主題屬性

android:dropDownSelector:用于設定spinnerMode=”dropdown”時列表選擇器的顯示效果。它可以用”@[+][package]:type:name”格式來引用另外的資源,或者是用”?[package:][type:]name”的格式來 應用主題屬性,還可是”#rgb”、”#argb”、”#rrggbb”、”aarrggbb”格式的顏色值

android:dropDownWidth:在spinnerMode=”dropdown”時,設定下拉框的寬度。

這個屬性可以是帶有單位的浮點型的尺寸值,如:14.5sp。有效的單位包括:px(像素)、dp(密度無關的像素)、sp(基于引用字體的尺寸來縮放的像素)、in(英寸)、mm(毫米)

還可以是下列常量之一:
fill_parent = -1,下拉框的寬度應該使用屏幕的寬度來設定。這個常量從API Level 8開始被廢棄了,并且使用mach_parent常量來代替。
mach_parent = -1,下拉框的寬度應該使用屏幕的寬度來設定。在API Level 8中被引入。
wrap_content = -2,下拉框的寬度應該跟它的內容相適應。

android:gravity:這個屬性用于設置當前選擇的項目的對齊方式。

android:popupBackground:在spinner=”dropdown”時,使用這個屬性來設置下拉列表的背景??梢允褂谩?#64;[+][package:]type:name”格式來引用另外的資源,或者使用”?[package:][type:]name”格式來應 用主題屬性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式的顏色值。


3,Arrayadapter 設置Spinner的的適配器,提供列表項

下面提供兩個Spinner,第一個使用“下拉列表”,android:entries屬性提供數組,第二個使用“dialog”形式,使用ArrayAdapter提供適配器

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- 這個spinner由entries提供值 --><Spinnerandroid:id="@+id/spinner1"android:layout_width="match_parent"android:layout_height="wrap_content"android:dropDownWidth="200dp"android:entries="@array/province"/><!-- 這個Spinner有adapter提供值 ,android:spinnerMode="dialog"下拉列表是以對話框的形式--><Spinnerandroid:id="@+id/spinner2"android:layout_width="match_parent"android:layout_height="wrap_content"android:popupBackground="#f00"android:spinnerMode="dialog"android:prompt="@string/promp" /></LinearLayout>MainActivity.java

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//獲取spinner布局文件中的Spinner組件Spinner sp=(Spinner) findViewById(R.id.spinner2);String[] arr={"唐僧","孫悟空","豬八戒","沙和尚"};//創建adapter對象ArrayAdapter<String> aa=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr);sp.setAdapter(aa);}

這是Spinner的標準使用方法,其中,有兩行代碼可以決定Spinner的外觀:

ArrayAdapter<String> aa=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr);第二個參數是Spinner未展開菜單時Spinner的默認樣式,android.R.layout.simple_spinner_item是系統自帶的內置布局。

4,自定義Adapter創建Spinner

這種情況適用于spinner比較復雜的情況,比如帶有圖標。
下面我們定義一個選擇聯系人的Spinner。

main.xml

<LinearLayout android:layout_width="fill_parent"android:layout_height="80dip"android:orientation="vertical" ><Spinnerandroid:id="@+id/spinner2"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>Person.java

package com.example.spinnerdemo;public class Person {private String personName;private String personAddress;public Person(String personName, String personAddress) {super();this.personName = personName;this.personAddress = personAddress;}public String getPersonName() {return personName;}public void setPersonName(String personName) {this.personName = personName;}public String getPersonAddress() {return personAddress;}public void setPersonAddress(String personAddress) {this.personAddress = personAddress;}}

自定義的MyAdapter.java

package com.example.spinnerdemo;import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView;/*** 自定義適配器類* @author jiangqq <a href=http://blog.csdn.net/jiangqq781931404></a>**/ public class MyAdapter extends BaseAdapter {private List<Person> mList;private Context mContext;public MyAdapter(Context pContext, List<Person> pList) {this.mContext = pContext;this.mList = pList;}@Overridepublic int getCount() {return mList.size();}@Overridepublic Object getItem(int position) {return mList.get(position);}@Overridepublic long getItemId(int position) {return position;}/*** 下面是重要代碼,每一項的布局是兩個文本框,當然也可以加其他組件,這個就很豐富了*/@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);convertView=_LayoutInflater.inflate(R.layout.item_custom, null);if(convertView!=null) {ImageView imageView = (ImageView)convertView.findViewById(R.id.image);imageView.setImageResource(R.drawable.ic_launcher);TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);_TextView1.setText(mList.get(position).getPersonName());_TextView2.setText(mList.get(position).getPersonAddress());}return convertView;} }MainActivity.java

// 初始化控件Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);// 建立數據源List<Person> persons=new ArrayList<Person>();persons.add(new Person("張三", "上海 "));persons.add(new Person("李四", "上海 "));persons.add(new Person("王五", "北京" ));persons.add(new Person("趙六", "廣州 "));// 建立Adapter綁定數據源MyAdapter _MyAdapter=new MyAdapter(this, persons);//綁定Adapterspinner2.setAdapter(_MyAdapter);



總結

以上是生活随笔為你收集整理的UI组件之AdapterView及其子类(三)Spinner控件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。