Android編程實現(xiàn)多列顯示的下拉列表框Spinner功能示例
本文實例講述了Android編程實現(xiàn)多列顯示的下拉列表框Spinner功能。分享給大家供大家參考,具體如下:
先上張效果圖:

嚴(yán)格來說,這并不是一個下拉列表,只不過實現(xiàn)的效果很像是下拉列表
實現(xiàn)原理:
該下拉列表其實是一個AlertDialog.Builder,給它設(shè)置了一個以LinearLayout布局的View。該View內(nèi)使用了一個GridView組件,
代碼:
package yyy.testandroid9;
private Intent intent;
private int index = 0;
private SharedPreferences preferences;
private File file;
private Spinner spinner;
private GridView gridView;
private LinearLayout layout;
private Builder builder;
private AlertDialog dialog;
private MyAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LayoutInflater inflater = LayoutInflater.from(this);
layout = (LinearLayout) inflater.inflate(R.layout.bank_grid, null);
gridView = (GridView) layout.findViewById(R.id.grid);
adapter = new MyAdapter(this);
gridView.setAdapter(adapter);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
textView = (TextView) findViewById(R.id.textview);
builder = new Builder(TestAndroid9Activity.this);
builder.setView(layout);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(dialog == null){
dialog = builder.show();
}
dialog.show();
}
});
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
button1.setText(getResources().getStringArray(R.array.city)[position]);
dialog.dismiss();
adapter.map.put(index, false);
adapter.map.put(position, true);
index = position;
adapter.notifyDataSetChanged();
}
});
}
private class MyAdapter extends BaseAdapter{
private Context context;
private String[] citys;
private LayoutInflater inflater;
public HashMap<Integer, Boolean> map;
public MyAdapter(Context context) {
super();
this.context = context;
citys = context.getResources().getStringArray(R.array.city);
inflater = LayoutInflater.from(context);
map = new HashMap<Integer, Boolean>();
for(int i=0;i<citys.length;i++){
map.put(i, false);
}
}
public int getCount() {
// TODO Auto-generated method stub
return citys.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
if(view == null){
view = inflater.inflate(R.layout.bank_item, null);
}
TextView textView = (TextView) view.findViewById(R.id.list_text);
RadioButton radioButton = (RadioButton) view.findViewById(R.id.radiobutton);
radioButton.setChecked(map.get(position));
textView.setText(citys[position]);
return view;
}
}
bank_grid.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="20dp"
android:background="#ffffff"
android:id="@+id/grid_layout">
<GridView
android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:verticalSpacing="20px"
android:horizontalSpacing="10px"
android:numColumns="4"
android:scrollbars="vertical"
android:layout_margin="10dp"/>
</LinearLayout>
bank_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
>
<RadioButton
android:id="@+id/radiobutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:focusable="false"
android:clickable="false"
android:focusableInTouchMode="false"
/>
<TextView
android:id="@+id/list_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:layout_gravity="center_vertical"/>
</LinearLayout>
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
淺談android獲取設(shè)備唯一標(biāo)識完美解決方案
本篇文章主要介紹了淺談android獲取設(shè)備唯一標(biāo)識完美解決方案,具有一定的參考價值,有興趣的可以了解一下2017-08-08
Android利用EditText如何實現(xiàn)搜索框詳解
EditText 在開發(fā)中也是經(jīng)常用到的控件,也是一個比較必要的組件,下面這篇文章主要給大家介紹了關(guān)于Android利用EditText如何實現(xiàn)搜索框的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07
Android studio 下的APK打包失敗問題解決辦法
這篇文章主要介紹了Android studio 下的APK打包失敗問題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android eclipse使用gradle打包的圖文教程
本文通過圖文并茂的形式給大家介紹了Android eclipse使用gradle打包的方法,需要的朋友可以參考下2018-10-10
Android自定義ViewGroup之第一次接觸ViewGroup
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup之第一次接觸ViewGroup,感興趣的小伙伴們可以參考一下2016-06-06

