編輯:關於Android編程
標簽(空格分隔): Android基礎入門教程
本來本節是想給大家介紹一個Gallery(畫廊)的一個控件的,後來想想還是算了,因為
在Android 4.1後就已經被棄用了,盡管我們可以通過兼容不來使用Gallery,不過想想
還是算了,因為Gallery在每次切換圖片的時候,都需要重新創建視圖,這樣無疑會造成
很大資源浪費!我們可以通過其他方法來實現Gallery效果,比如通過HorizontalScrollView
來實現水平滾動效果,或者編寫一個水平方向的ListView~有興趣自己谷歌!
本節學習的是一個叫做Spinner的Adapter控件!
應用場景:當我們的app需要用戶輸入數據時,除了讓用戶自己打字以外,還有一種比較貼心的設計:
列出一組選項讓用戶從中挑選,從而方便了我們的用戶!
話不多說,開始學習Spinner的基本用法~
android:dropDownHorizontalOffset:設置列表框的水平偏移距離 android:dropDownVerticalOffset:設置列表框的水平豎直距離 android:dropDownSelector:列表框被選中時的背景 android:dropDownWidth:設置下拉列表框的寬度 android:gravity:設置裡面組件的對其方式 android:popupBackground:設置列表框的背景 android:prompt:設置對話框模式的列表框的提示信息(標題),只能夠引用string.xml
中的資源id,而不能直接寫字符串 android:spinnerMode:列表框的模式,有兩個可選值:
dialog:對話框風格的窗口 dropdown:下拉菜單風格的窗口(默認) 可選屬性:android:entries:使用數組資源設置下拉列表框的列表項目
對了,Spinner會默認選中第一個值,就是默認調用spinner.setSection(0),
你可以通過這個設置默認的選中值,另外,會觸發一次OnItemSelectedListener
事件,暫時沒找到解決方法,下面折衷的處理是:添加一個boolean值,然後設置
為false,在onItemSelected時進行判斷,false說明是默認觸發的,不做任何操作
將boolean值設置為true;true的話則正常觸發事件!
示例中寫了兩個不同的Spinner,從數據源,列表框風格等進行對比~
接下來我們來看下
效果圖:
代碼實現:
這裡依然使用的我們前面的可復用BaseAdapter:
第一個Spinner的數據源編寫:
在res/values下編寫一個:myarrays.xml的文件,內容如下:
- 英勇青銅
- 不屈白銀
- 榮耀黃金
- 華貴鉑金
- 璀璨鑽石
- 超凡大師
- 最強王者
接著是第二個Spinner的布局:item_spin_hero.xml:
再接著編寫一個Entitiy實體類: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:
MainActivity.java:
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
private Spinner spin_one;
private Spinner spin_two;
private Context mContext;
//判斷是否為剛進去時觸發onItemSelected的標志
private boolean one_selected = false;
private boolean two_selected = false;
private ArrayList 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();
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,無極劍聖:易(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,狂戰士:奧拉夫(Olaf)));
myAdadpter = new MyAdapter(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) {
}
}
另外關於Spinner的OnItemSelectedListener,以及如何獲得選中項的值,就自己看上面的
代碼啦~
1,首先需要保證自己的jdk安裝配置完成http://www.eclipse.org/babel/downloads.php 2 sdk的下載,http:/
在Android開發中,往往要用到自定義的控件來實現我們的需求或效果。在使用自定義 控件時,難免要用到自定義屬性,那怎麼使用自定義屬性呢?在文件res/values/下新
之前講到過,應用開發者為了保護自己的應用不被別人分析和篡改,會將應用的安全性寄托在某個(些)機制上。可以被用來保護應用的機制有很多,效果和實現難度也是各有特點。有這樣一類
MSM8909+Android5.1.1之bootloader---修改UART0時鐘頻率導致無法下載的問題解決 用高通的QFIL下載程序,正常下載界面後顯示如