IT技術(shu)互動交(jiao)流平台

万人红黑大战官网

來源︰IT165收集  發布日期︰2020-02-19 09:50:36

Spinner提供了從(cong)一個數(shu)據集合中快速選(xuan)擇一項值的(de)辦(ban)法。默(mo)認情況(kuang)下Spinner顯示的(de)是當前選(xuan)擇的(de)值,點擊Spinner會彈出一個包含所有可選(xuan)值的(de)dropdown菜單,從(cong)該菜單中可以為(wei)Spinner選(xuan)擇一個新值。

這(zhe)里寫圖片描述

上圖顯示的(de)是Spinner常見(jian)的(de)樣式(shi)。這(zhe)篇文章中我(wo)將(jiang)討zhi).Spinner的(de)基本用法 2.設(she)置Spinner的(de)Adapter (arrayadapter 和(he)自(zi)定(ding)義(yi)BaseAdapter)3.Spinner的(de)菜單顯示方式(shi) 4.Spinner的(de)xml屬性

最簡單的(de)Spinner

在布局文件(jian)中添加(jia)Spinner控件(jian)

 <LinearLayout  android:layout_width='fill_parent' android:layout_height='fill_parent' android:orientation='vertical' > <Spinner  android:id='@+id/spinner1'  android:layout_width='wrap_content'  android:layout_height='wrap_content'  android:entries='@array/languages'  /> </LinearLayout>

其中android:entries=”@array/languages”表示Spinner的(de)數(shu)據集合是從(cong)資(zi)源ci)anguages中獲(huo)取的(de),languages數(shu)組資(zi)源定(ding)義(yi)在values/arrays.xml中︰

<?xml version='1.0' encoding='utf-8'?><resources> <string-array name='languages'> <item>c語言</item> <item>java </item> <item>php</item> <item>xml</item> <item>html</item> </string-array></resources>

如果你不(bu)需要對Spinner的(de)選(xuan)擇事件(jian)做響應,那麼(me)一個完整(zheng)的(de)Spinner使用流程就結束了。

運行結果︰

這(zhe)里寫圖片描述

當bi)唬 話闈榭kuang)下我(wo)們是需要響應Spinner選(xuan)擇事件(jian)的(de),可以通過OnItemSelectedListener的(de)回(hui)調方法實現

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

上面(mian)的(de)Spinner看起(qi)來非常漂亮,不(bu)過它並(bing)不(bu)是總是如此(ci),剛(gang)剛(gang)看到的(de)是在android:Theme.Holo.Light主(zhu)題下的(de)效果,同樣的(de)代碼如果在android:Theme.Light下面(mian)就會變(bian)得很(hen)丑(chou)。

這(zhe)里寫圖片描述 這(zhe)里寫圖片描述

想(xiang)必這(zhe)也是很(hen)多人不(bu)想(xiang)使用Spinner的(de)原因了吧(ba)。如果想(xiang)兼容2.3,則只能忍受這(zhe)樣的(de)效果。

設(she)置Spinner的(de)Adapter
上面(mian)使用Spinner數(shu)據源cong)ml數(shu)組,其實用的(de)最多的(de)還是通過adapter來跟Spinner綁(bang)定(ding)數(shu)據。

使用ArrayAdapter

// 初始(shi)化控件(jian)Spinner spinner = (Spinner) findViewById(R.id.spinner1);// 建立數(shu)據源String[] mItems = getResources().getStringArray(R.array.languages);// 建立Adapter並(bing)且(qie)綁(bang)定(ding)數(shu)據源ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//綁(bang)定(ding) Adapter到控件(jian)spinner .setAdapter(adapter);spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view,  int pos, long id) { String[] languages = getResources().getStringArray(R.array.languages); Toast.makeText(MainActivity.this, '你點擊的(de)是:'+languages[pos], 2000).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { // Another interface callback }});

這(zhe)是Spinner的(de)標準使用方法,其中,有兩行代碼可以決定(ding)Spinner的(de)外觀︰

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);

第二個參數(shu)是Spinner未展開(kai)菜單時Spinner的(de)默(mo)認樣式(shi),android.R.layout.simple_spinner_item是系統(tong)自(zi)帶的(de)內(na)置布局。

2

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

設(she)置的(de)是展開(kai)的(de)時候(hou)下拉菜單的(de)樣式(shi)(注意和(he)上面(mian)區別),同理android.R.layout.simple_spinner_dropdown_item也是內(na)置布局。

如果不(bu)設(she)置adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)會怎樣呢?

會造(zao)成未展開(kai)的(de)sipnner和(he)展開(kai)的(de)菜單都(du)是qie)恢zhong)布局樣式(shi)。下面(mian)一運行截(jie)圖來ci)得ming)︰

沒有adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)︰

這(zhe)里寫圖片描述

有setDropDownViewResource︰

這(zhe)里寫圖片描述

你可能會很(hen)好奇如果設(she)置了setDropDownViewResource但(dan)是setDropDownViewResource的(de)參數(shu)和(he)ArrayAdapter的(de)第二個布局參數(shu)(simple_spinner_item)一致(zhi)的(de)情況(kuang)下會怎樣。情況(kuang)是和(he)沒有setDropDownViewResource是qie)謊de),因為(wei)上面(mian)說了不(bu)設(she)置setDropDownViewResource Spinner未展開(kai)和(he)展開(kai)都(du)是用的(de)一樣的(de)布局。

其實simple_spinner_item和(he)simple_spinner_dropdown_item兩者的(de)名字正好反cong)沉慫塹de)區別。一個應用于下拉一個應用于Spinner本身。

使用mi)遠ding)義(yi)的(de)BaseAdapter

這(zhe)種(zhong)情況(kuang)適用于spinner比(bi)較復雜的(de)情況(kuang),比(bi)如帶有圖標。

下面(mian)我(wo)們定(ding)義(yi)一個選(xuan)擇聯系人的(de)Spinner。

 <LinearLayout  android:layout_width='fill_parent' android:layout_height='80dip' android:orientation='vertical' > <Spinner  android:id='@+id/spinner2'  android:layout_width='wrap_content'  android:layout_height='wrap_content'  /> </LinearLayout>

activity中︰

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

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;/** * 自(zi)定(ding)義(yi)適配器類 * @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; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } /** * 下面(mian)是重(zhong)要代碼 */ @Override public 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; }}

運行效果︰

這(zhe)里寫圖片描述

Spinner的(de)菜單顯示方式(shi)

它有兩種(zhong)顯示形式(shi),一種(zhong)是下拉菜單,一種(zhong)是彈出框,菜單顯示形式(shi)是spinnerMode屬性決定(ding)的(de)︰

android:spinnerMode='dropdown'android:spinnerMode='dialog'

在android2.3上沒有這(zhe)個屬性,系統(tong)默(mo)認將(jiang)Spinner彈出菜單顯示成dialog。下面(mian)是Theme.Light和(he)Theme.Holo.Light下Spinner在不(bu)同模式(shi)下的(de)效果對比(bi)圖。

這(zhe)里寫圖片描述

Spinner的(de)xml屬性

其實上面(mian)已經(jing)提到了Spinner的(de)兩個屬性︰

1 entries: 直接在xml布局文件(jian)中綁(bang)定(ding)數(shu)據源(可以不(bu)設(she)置,即可以在Activity中動態綁(bang)定(ding))

2 spinnerMode: Spinner的(de)顯示形式(shi)

除此(ci)之外還有如下屬性︰

prompt︰在Spinner彈出選(xuan)擇對話框的(de)時候(hou)對話框的(de)標題︰

這(zhe)里寫圖片描述

屬性名稱

android:dropDownHorizontalOffset

對應方法︰

setDropDownHorizontalOffset(int)

spinnerMode=”dropdown”時,下拉的(de)項目(mu)選(xuan)擇窗口在水平方向相對于Spinner窗口的(de)偏移量。

它必須是qie)桓齟械?壞de)浮(fu)點型tong)嘰cun)值,如︰”14.5sp”。有效的(de)單位包括(kuo)︰px(像素)、dp(密度無關(guan)的(de)像素)、sp(基于引用mi)痔宓de)尺寸(cun)來ci)醴諾de)像素)、in(英(ying)寸(cun))、mm(毫米(mi))。

這(zhe)個屬性還可以引用一個資(zi)源(格式(shi)︰@[package:]type:name)或者是包含這(zhe)種(zhong)類型值的(de)主(zhu)題屬性(格式(shi)︰?[package][type:]name)。

這(zhe)個屬性對應全局屬性資(zi)源符號dropDownHorizontalOffset。

android:dropDownSelector

用于設(she)定(ding)spinnerMode=”dropdown”時列(lie)表選(xuan)擇器的(de)顯示效果。

它可以用”@[+][package]:type:name”格式(shi)來引用另外的(de)資(zi)源,或者是用”?[package:][type:]name”的(de)格式(shi)來 應用主(zhu)題屬性,還可以是”#rgb”、”#argb”、”#rrggbb”、”aarrggbb”格式(shi)的(de)顏色值。

它對應的(de)全局屬性資(zi)源符號是dropDownSelector。

android:dropDownVerticalOffset

對應方法︰

setDropDownVerticalOffset(int)

spinnerMode=”dropdown”時,下拉的(de)項目(mu)選(xuan)擇窗口在垂(chui)直方向相對于Spinner窗口的(de)偏移量。

這(zhe)個屬性它必須是qie)桓齟械?壞de)浮(fu)點型tong)嘰cun)值,如︰”14.5sp”。有效的(de)單位包括(kuo)︰px(像素)、dp(密度無關(guan)的(de)像素)、sp(基于引用mi)痔宓de)尺寸(cun)來ci)醴諾de)像素)、in(英(ying)寸(cun))、mm(毫米(mi))。

還可以引用一個資(zi)源(格式(shi)︰@[package:]type:name)或者是包含這(zhe)種(zhong)類型值的(de)主(zhu)題屬性(格式(shi)︰?[package][type:]name)。

這(zhe)個屬性對應全局屬性資(zi)源符號dropDownVerticalOffset。

android:dropDownWidth

對應方法︰

setDropDownWidth(int)

在spinnerMode=”dropdown”時,設(she)定(ding)下拉框的(de)mu)磯取/p>

這(zhe)個屬性可以是帶有單位的(de)浮(fu)點型的(de)尺寸(cun)值,如︰14.5sp。有效的(de)單位包括(kuo)︰px(像素)、dp(密度無關(guan)的(de)像素)、sp(基于引用mi)痔宓de)尺寸(cun)來ci)醴諾de)像素)、in(英(ying)寸(cun))、mm(毫米(mi))。

還可以引用一個資(zi)源(格式(shi)︰@[package:]type:name)或者是包含這(zhe)種(zhong)類型值的(de)主(zhu)題屬性(格式(shi)︰?[package][type:]name)。

還可以是下列(lie)常量之一︰

fill_parent = -1,下拉框的(de)mu)磯扔Ω檬褂悶聊壞de)mu)磯壤瓷she)定(ding)。這(zhe)個常量從(cong)API Level 8開(kai)始(shi)被廢棄了,並(bing)且(qie)使用mach_parent常量來代替。

mach_parent = -1,下拉框的(de)mu)磯扔Ω檬褂悶聊壞de)mu)磯壤瓷she)定(ding)。在API Level 8中被引入。

wrap_content = -2,下拉框的(de)mu)磯扔Ω黴de)內(na)容相適應。

它對應的(de)全局資(zi)源符號是dropDownWidth。

android:gravity

對應方法︰

1
setGravity(int)
這(zhe)個屬性用于設(she)置當前選(xuan)擇的(de)項目(mu)的(de)對齊方式(shi)。

它必須是qie)韻魯A恐抵 換蜃楹希ㄓrdquo;”符號分離)。

top = 0x30︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)頂部,不(bu)改變(bian)它的(de)尺寸(cun)。

bottom = 0x50︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)底部,不(bu)改變(bian)它的(de)尺寸(cun)。

left = 0x03︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)左邊,不(bu)改變(bian)它的(de)尺寸(cun)。

right = 0x05︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)右邊,不(bu)改變(bian)它的(de)尺寸(cun)。

center_vertical = 0x10︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)垂(chui)直中心(xin),不(bu)改變(bian)它的(de)尺寸(cun)。

fill_vertical = 0x70︰為(wei)了完全的(de)填充它的(de)容器,系統(tong)會根據需要來增加(jia)you)≡穸韻蟺de)垂(chui)直尺寸(cun)。

center_horizontal = 0x01︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)水平中心(xin),不(bu)改變(bian)它的(de)尺寸(cun)。

fill_horizontal = 0x07︰為(wei)了完全的(de)填充它的(de)容器,系統(tong)會根據需要來增加(jia)you)≡穸韻蟺de)水平尺寸(cun)。

center = 0x11︰把選(xuan)擇的(de)對象放到它的(de)容器的(de)垂(chui)直和(he)水平中心(xin),不(bu)改變(bian)它的(de)尺寸(cun)。

fill = 0x77︰為(wei)了完全的(de)填充它的(de)容器,系統(tong)會根據需要來增加(jia)you)≡穸韻蟺de)水平和(he)垂(chui)直尺寸(cun)。

clip_vertical = 0x80︰附加(jia)的(de)mu)裳xuan)設(she)置,它可以設(she)置容器內(na)子對象的(de)上下邊緣裁剪它的(de)容器邊框。裁剪會基于垂(chui)直對齊的(de)方式(shi)︰頂部對齊的(de)會裁剪底部邊緣,底部對齊的(de)會裁剪頂部邊緣,不(bu)會上下邊緣都(du)裁剪。

clip_horizontal = 0x08︰附加(jia)的(de)mu)裳xuan)設(she)置,它可以設(she)置容器內(na)子對象的(de)左右邊緣裁剪它的(de)容器邊框。裁剪會基于水平對齊的(de)方式(shi)︰左對齊的(de)會裁剪右邊緣,右對齊的(de)會裁剪左邊緣,不(bu)會左右邊緣都(du)裁剪。

start = 0x00800003︰把對象放到它的(de)容器的(de)mu) shi)位置,不(bu)改變(bian)它的(de)尺寸(cun)。

end = 0x00800005︰把對象放到它的(de)容器的(de)結束位置,不(bu)改變(bian)它的(de)尺寸(cun)。

對應的(de)全局屬性資(zi)源符號是gravity。

注︰Spinner對象是qie)桓鍪喲岸韻筧 鰨 she)置它的(de)gravity屬性時,只會改變(bian)容器內(na)部子視窗對象的(de)對齊方式(shi),並(bing)不(bu)會改變(bian)子視窗內(na)部內(na)容的(de)對齊方式(shi)。

android:popupBackground

對應方法︰

1
setPopupBackgroundResource(int)
在spinner=”dropdown”時,使用這(zhe)個屬性來設(she)置下拉列(lie)表的(de)背景。

可以使用”@[+][package:]type:name”格式(shi)來引用另外的(de)資(zi)源,或者使用”?[package:][type:]name”格式(shi)來cong)用主(zhu)題屬性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式(shi)的(de)顏色值。

對應的(de)全局屬性資(zi)源符號是popupBackground

万人红黑大战官网

    Tag標簽︰控件(jian)  
    • 万人红黑大战官网

    About IT165 - 廣告服(fu)務 - 隱私聲(sheng)明(ming) - 版權(quan)申明(ming) - 免責條款 - 網站地(di)圖 - 網友(you)投稿 - 聯系方式(shi)
    本站內(na)容來自(zi)于互聯網,僅供用于網絡技術(shu)學習,學習中請遵循相關(guan)法律法規
    万人红黑大战官网 | 下一页