W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本來(lái)本節(jié)是想給大家介紹一個(gè)Gallery(畫廊)的一個(gè)控件的,后來(lái)想想還是算了,因?yàn)?在Android 4.1后就已經(jīng)被棄用了,盡管我們可以通過(guò)兼容不來(lái)使用Gallery,不過(guò)想想 還是算了,因?yàn)镚allery在每次切換圖片的時(shí)候,都需要重新創(chuàng)建視圖,這樣無(wú)疑會(huì)造成 很大資源浪費(fèi)!我們可以通過(guò)其他方法來(lái)實(shí)現(xiàn)Gallery效果,比如通過(guò)HorizontalScrollView 來(lái)實(shí)現(xiàn)水平滾動(dòng)效果,或者編寫一個(gè)水平方向的ListView~有興趣自己谷歌!
本節(jié)學(xué)習(xí)的是一個(gè)叫做Spinner的Adapter控件! 應(yīng)用場(chǎng)景:當(dāng)我們的app需要用戶輸入數(shù)據(jù)時(shí),除了讓用戶自己打字以外,還有一種比較貼心的設(shè)計(jì): 列出一組選項(xiàng)讓用戶從中挑選,從而方便了我們的用戶! 話不多說(shuō),開(kāi)始學(xué)習(xí)Spinner的基本用法~
- android:dropDownHorizontalOffset:設(shè)置列表框的水平偏移距離
- android:dropDownVerticalOffset:設(shè)置列表框的水平豎直距離
- android:dropDownSelector:列表框被選中時(shí)的背景
- android:dropDownWidth:設(shè)置下拉列表框的寬度
- android:gravity:設(shè)置里面組件的對(duì)其方式
- android:popupBackground:設(shè)置列表框的背景
- android:prompt:設(shè)置對(duì)話框模式的列表框的提示信息(標(biāo)題),只能夠引用string.xml 中的資源id,而不能直接寫字符串
- android:spinnerMode:列表框的模式,有兩個(gè)可選值: dialog:對(duì)話框風(fēng)格的窗口 dropdown:下拉菜單風(fēng)格的窗口(默認(rèn))
- 可選屬性:android:entries:使用數(shù)組資源設(shè)置下拉列表框的列表項(xiàng)目
對(duì)了,Spinner會(huì)默認(rèn)選中第一個(gè)值,就是默認(rèn)調(diào)用spinner.setSection(0), 你可以通過(guò)這個(gè)設(shè)置默認(rèn)的選中值,另外,會(huì)觸發(fā)一次OnItemSelectedListener 事件,暫時(shí)沒(méi)找到解決方法,下面折衷的處理是:添加一個(gè)boolean值,然后設(shè)置 為false,在onItemSelected時(shí)進(jìn)行判斷,false說(shuō)明是默認(rèn)觸發(fā)的,不做任何操作 將boolean值設(shè)置為true;true的話則正常觸發(fā)事件! 示例中寫了兩個(gè)不同的Spinner,從數(shù)據(jù)源,列表框風(fēng)格等進(jìn)行對(duì)比~ 接下來(lái)我們來(lái)看下
效果圖:
代碼實(shí)現(xiàn):
這里依然使用的我們前面的可復(fù)用BaseAdapter:
第一個(gè)Spinner的數(shù)據(jù)源編寫:
在res/values下編寫一個(gè):myarrays.xml的文件,內(nèi)容如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="data">
<item>英勇青銅</item>
<item>不屈白銀</item>
<item>榮耀黃金</item>
<item>華貴鉑金</item>
<item>璀璨鉆石</item>
<item>超凡大師</item>
<item>最強(qiáng)王者</item>
</string-array>
</resources>
接著是第二個(gè)Spinner的布局:item_spin_hero.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="horizontal"
android:padding="5dp">
<ImageView
android:id="@+id/img_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@mipmap/iv_lol_icon1" />
<TextView
android:id="@+id/txt_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="15dp"
android:text="德瑪西亞"
android:textSize="16sp" />
</LinearLayout>
再接著編寫一個(gè)Entitiy實(shí)體類:Hero.java:
/**
* Created by Jay on 2015/9/24 0024.
*/
public class Hero {
private int hIcon;
private String hName;
public Hero() {
}
public Hero(int hIcon, String hName) {
this.hIcon = hIcon;
this.hName = hName;
}
public int gethIcon() {
return hIcon;
}
public String gethName() {
return hName;
}
public void sethIcon(int hIcon) {
this.hIcon = hIcon;
}
public void sethName(String hName) {
this.hName = hName;
}
}
最后是MainActivity的布局與Java代碼部分:
布局文件:activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="選擇您的排位分段"
android:textColor="#44BDED"
android:textSize="18sp" />
<Spinner
android:id="@+id/spin_one"
android:layout_width="100dp"
android:layout_height="64dp"
android:entries="@array/data"
android:prompt="@string/spin_title"
android:spinnerMode="dialog" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="選擇你的拿手英雄~"
android:textColor="#F5684A"
android:textSize="18sp" />
<Spinner
android:id="@+id/spin_two"
android:layout_width="wrap_content"
android:layout_height="64dp" />
</LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private Spinner spin_one;
private Spinner spin_two;
private Context mContext;
//判斷是否為剛進(jìn)去時(shí)觸發(fā)onItemSelected的標(biāo)志
private boolean one_selected = false;
private boolean two_selected = false;
private ArrayList<Hero> mData = null;
private BaseAdapter myAdadpter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
mData = new ArrayList<Hero>();
bindViews();
}
private void bindViews() {
spin_one = (Spinner) findViewById(R.id.spin_one);
spin_two = (Spinner) findViewById(R.id.spin_two);
mData.add(new Hero(R.mipmap.iv_lol_icon1,"迅捷斥候:提莫(Teemo)"));
mData.add(new Hero(R.mipmap.iv_lol_icon2,"諾克薩斯之手:德萊厄斯(Darius)"));
mData.add(new Hero(R.mipmap.iv_lol_icon3,"無(wú)極劍圣:易(Yi)"));
mData.add(new Hero(R.mipmap.iv_lol_icon4,"德萊厄斯:德萊文(Draven)"));
mData.add(new Hero(R.mipmap.iv_lol_icon5,"德邦總管:趙信(XinZhao)"));
mData.add(new Hero(R.mipmap.iv_lol_icon6,"狂戰(zhàn)士:奧拉夫(Olaf)"));
myAdadpter = new MyAdapter<Hero>(mData,R.layout.item_spin_hero) {
@Override
public void bindView(ViewHolder holder, Hero obj) {
holder.setImageResource(R.id.img_icon,obj.gethIcon());
holder.setText(R.id.txt_name, obj.gethName());
}
};
spin_two.setAdapter(myAdadpter);
spin_one.setOnItemSelectedListener(this);
spin_two.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (parent.getId()){
case R.id.spin_one:
if(one_selected){
Toast.makeText(mContext,"您的分段是~:" + parent.getItemAtPosition(position).toString(),
Toast.LENGTH_SHORT).show();
}else one_selected = true;
break;
case R.id.spin_two:
if(two_selected){
TextView txt_name = (TextView) view.findViewById(R.id.txt_name);
Toast.makeText(mContext,"您選擇的英雄是~:" + txt_name.getText().toString(),
Toast.LENGTH_SHORT).show();
}else two_selected = true;
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
另外關(guān)于Spinner的OnItemSelectedListener,以及如何獲得選中項(xiàng)的值,就自己看上面的 代碼啦~
好的,本節(jié)給大家介紹了Spinner(下拉選項(xiàng)框)的使用,例子還是蠻有趣的,哈哈~! 別問(wèn)我哪個(gè)區(qū)什么段位,我可是人機(jī)小王子,可惜一直在青銅分段苦苦掙扎~ 你知道為什么的
,好吧,本節(jié)就到這里~
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: