spinner的使用
来源:互联网 发布:mac微信语音导出软件 编辑:程序博客网 时间:2024/05/01 20:21
虽然现在spinner在实际项目中用到的并不是很多,更多的需求还是用自定义popupWindow和dialog的来代替,但是当我们有一些简单的小需求时用spinner快速实现也不失为一种好的选择。
资源文件数组
<string-array name="area_array"> <item>中国</item> <item>美国</item> <item>法国</item> <item>德国</item> <item>津巴布韦</item> <item>韩国</item> <item>印度</item> </string-array>
1.直接在xml中使用,一些常用属性
<Spinner android:layout_marginTop="60dp" android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/area_array" android:spinnerMode="dialog" ></Spinner> <!--android:entries="@array/area_array"属性介绍:entries:表示spinner显示内容直接从资源文件中数组获得--> <!--android:spinnerMode="dialog" 该属性对应spinner显示的2种模式:1android:spinnerMode="dropdown"下拉模式;2.dialog窗口模式--> <!--android:prompt="提示内容" 当对应显示为dialog模式时,spinner下拉显示内容顶部的提示内容-->
2.Adapter的使用(常用ArrayAdapter和自定义Adapter(一般继承BaseAdapter))
a.都用系统自带的布局和ArrayAdapter实现的最简单的spinner
public class SimpleSpinnerActivity extends AppCompatActivity{ EditText mArea; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_simple_spinner); mArea = (EditText) findViewById(R.id.area); Button step =(Button) findViewById(R.id.step); step.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SimpleSpinnerActivity.this, CustomSpinnerActivity.class); startActivity(intent); } }); Spinner spinner = (Spinner) findViewById(R.id.spinner); final String[] areaArray = getResources().getStringArray(R.array.area_array); //第二个参数代表spinner为展开时,spinner要显示的样式,这里用系统自带的布局 ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getApplication(), android.R.layout.simple_spinner_item, areaArray); //设置spinner展开后每个item布局样式,这里都用系统自带的布局 mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setPrompt("选择国家");//设置提示:显示模式为dialog时有用 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { ((TextView) view).setTextColor(0xff00ff00);//改变选择后要显示字体的颜色 mArea.setText(areaArray[position]); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); spinner.setAdapter(mAdapter); }}
b.自定义布局和Adapter实现复杂spinner
1.自定义Adapter
public class MyAdapter extends BaseAdapter { private Context mContext; private List<ItemBean> mItemBeans; private LayoutInflater mInflater; private OnItemClickListener mOnItemClickListener; public MyAdapter(Context context, List<ItemBean> itemBeans) { this.mContext = context; this.mItemBeans = itemBeans; mInflater = LayoutInflater.from(mContext); } @Override public int getCount() { return mItemBeans.size(); } @Override public Object getItem(int position) { return mItemBeans.get(position); } @Override public long getItemId(int position) { return position; } // SpinnerAdapter// ListAdapter public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.mOnItemClickListener = onItemClickListener; } public interface OnItemClickListener { void onItemClick(View v, int position); } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) mInflater.inflate(android.R.layout.simple_spinner_item, parent, false); view.setBackgroundColor(0xff0000); return view; } @Override public View getDropDownView(final int position, View convertView, ViewGroup parent) { LinearLayout view = (LinearLayout) mInflater.inflate(R.layout.item_spinner_layout, parent, false); ImageView iv = (ImageView) view.findViewById(R.id.iv_item); final TextView tv = (TextView) view.findViewById(R.id.tv_item); iv.setImageResource(mItemBeans.get(position).getIv()); tv.setText(mItemBeans.get(position).getTv());// 更具isSelect来设置tv的背景 tv.setSelected(mItemBeans.get(position).isSelect() ? true : false); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(tv, position); } } }); return view; }}
2.自定义单选择状态的ItemBean
/** * 用于显示自定义spinner条目的item布局对象 */public class ItemBean { private int iv;//图片资源,这里放在本地,用int类型,如果是网络上的可以定义成url类型 private String tv;//显示的内容 private boolean isSelect;//是否被选中 public int getIv() { return iv; } public void setIv(int iv) { this.iv = iv; } public String getTv() { return tv; } public void setTv(String tv) { this.tv = tv; } public boolean isSelect() { return isSelect; } public void setIsSelect(boolean isSelect) { this.isSelect = isSelect; } public ItemBean(int iv, String tv, boolean isSelect) { this.iv = iv; this.tv = tv; this.isSelect = isSelect; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof ItemBean)) return false; ItemBean itemBean = (ItemBean) o; if (getIv() != itemBean.getIv()) return false; if (isSelect() != itemBean.isSelect()) return false; return !(getTv() != null ? !getTv().equals(itemBean.getTv()) : itemBean.getTv() != null); } @Override public int hashCode() { int result = getIv(); result = 31 * result + (getTv() != null ? getTv().hashCode() : 0); result = 31 * result + (isSelect() ? 1 : 0); return result; } @Override public String toString() { return "ItemBean{" + "iv=" + iv + ", tv='" + tv + '\'' + ", isSelect=" + isSelect + '}'; }}
3.OnCreate自定义myAdapter的使用
public class CustomSpinnerActivity extends Activity { EditText mArea; String[] mTvDatas; ArrayList<ItemBean> mDatas;//MyAdapter数据集合 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_spinner); initDatas(); initView(); } private void initDatas() { mDatas = new ArrayList<>(); mTvDatas = getResources().getStringArray(R.array.area_array); for (int i = 0; i < mTvDatas.length; i++) { ItemBean itemBean = new ItemBean(R.mipmap.ic_launcher, "item" + i, i % 2 == 1 ? true : false); mDatas.add(itemBean); } } private void initView() { mArea = (EditText) findViewById(R.id.area); Spinner mSpinner = (Spinner) findViewById(R.id.spinner); MyAdapter myAdapter = new MyAdapter(this, mDatas); mSpinner.setAdapter(myAdapter); mSpinner.setVisibility(View.VISIBLE); mSpinner.setPrompt("自定义Spinner"); myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(View v, int position) { TextView tv = (TextView) v; Utils.showToast(CustomSpinnerActivity.this, tv.getText().toString().trim()); mArea.setText(tv.getText().toString().trim()); } }); mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { TextView tv=(TextView)view; tv.setTextColor(0xff00ff00); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); }}
下面是项目的Demo源码:有需要的自行下载http://download.csdn.net/detail/themelove/9326159
在写Demo过程中对Adapter又有了新一步的认识:
1.Adapter(顶层接口)其下分ListAdapter和SpinnerAdapter
2.BaseAdapter(抽象类)实现了ListAdapter和SpinnerAdapter
3.BaseAdapter有一些常用的默认子类:SimpleAdapter;ArrayAdapter,CursorAdapter
3.BaseAdapter有一些常用的默认子类:SimpleAdapter;ArrayAdapter,CursorAdapter
下面是Adapter体系的结构关系图
0 0
- (Spinner) android中Spinner的使用
- Spinner 的使用
- Spinner控件的使用
- Spinner的使用
- Spinner的使用
- Spinner的简单使用
- Android Spinner的使用
- Spinner控件的使用
- spinner的使用详解
- spinner组件的使用
- android spinner的使用
- Spinner的使用
- Spinner组件的使用
- Spinner的使用
- Spinner的使用
- spinner的简单使用
- Spinner的使用
- Android Spinner 的使用
- 杭电HDU1087
- java.lang.NoClassDefFoundError的几种原因与解决方法
- 异常总结,持续更新
- ContextLoaderListener(1)---WebApplicationContext创建过程
- 实习整理(十六)
- spinner的使用
- C的形参和实参的关系
- selenium自动化测试实现对网站的登陆(使用java编写)
- Ring实现原理剖析
- 如何优化 Android Studio 启动、编译和运行速度?
- Animation
- From scikit-learn to Spark ML
- jhat 应用
- 应用中添加QQ群(android、iOS、网页、二维码)