Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
来源:互联网 发布:廊坊名优网络 编辑:程序博客网 时间:2024/04/30 17:20
UI系列教程第七课:自定义spinner下拉框实现的实现
说道android下拉框spineer,框架中虽有现成的控件,但实际效果可能并不是我们所需要的那种,如下图:
其实我们更需要的是像WEB那种风格,如图所示:
其实实现也很简单,就是自定义个popwindow就可以了
下面贴上代码片段:
public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{private Context mContext;private ListView mListView;private NormalSpinerAdapter mAdapter;private IOnItemSelectListener mItemSelectListener;public SpinerPopWindow(Context context){super(context);mContext = context;init();}public void setItemListener(IOnItemSelectListener listener){mItemSelectListener = listener;}private void init(){View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);setContentView(view);setWidth(LayoutParams.WRAP_CONTENT);setHeight(LayoutParams.WRAP_CONTENT);setFocusable(true); ColorDrawable dw = new ColorDrawable(0x00);setBackgroundDrawable(dw);mListView = (ListView) view.findViewById(R.id.listview);mAdapter = new NormalSpinerAdapter(mContext);mListView.setAdapter(mAdapter);mListView.setOnItemClickListener(this);}public void refreshData(List<String> list, int selIndex){if (list != null && selIndex != -1){mAdapter.refreshData(list, selIndex);}}@Overridepublic void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {dismiss();if (mItemSelectListener != null){mItemSelectListener.onItemClick(pos);}}}主界面调用代码:
public class SpinerWindowDemoActivity extends Activity implements OnClickListener, AbstractSpinerAdapter.IOnItemSelectListener{ /** Called when the activity is first created. */private View mRootView;private TextView mTView;private ImageButton mBtnDropDown;private List<String> nameList = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } private void setupViews(){ mRootView = findViewById(R.id.rootView); mTView = (TextView) findViewById(R.id.tv_value);mBtnDropDown = (ImageButton) findViewById(R.id.bt_dropdown);mBtnDropDown.setOnClickListener(this);String[] names = getResources().getStringArray(R.array.hero_name);for(int i = 0; i < names.length; i++){nameList.add(names[i]);}mSpinerPopWindow = new SpinerPopWindow(this);mSpinerPopWindow.refreshData(nameList, 0);mSpinerPopWindow.setItemListener(this); }@Overridepublic void onClick(View view) {switch(view.getId()){case R.id.bt_dropdown:showSpinWindow();break;}}private void setHero(int pos){if (pos >= 0 && pos <= nameList.size()){String value = nameList.get(pos);mTView.setText(value);}}private SpinerPopWindow mSpinerPopWindow;private void showSpinWindow(){Log.e("", "showSpinWindow");mSpinerPopWindow.setWidth(mTView.getWidth());mSpinerPopWindow.showAsDropDown(mTView);}@Overridepublic void onItemClick(int pos) {setHero(pos);}}
就这么简单,具体UI美化大家再修改下xml就可以了
下面附上工程链接:
http://download.csdn.net/detail/geniuseoe2012/5184664
welcome to join android-develop group:298044305
more brilliant,Please pay attention to my CSDN blog -->http://blog.csdn.net/geniuseoe2012
上一课:Lance老师UI系列教程第六课->微信聊天气泡界面的实现
/*=============================================================================*/
为使SpinerPopWindow更为通用,特修改或增加以下几个类
AbstractSpinerAdapter
public abstract class AbstractSpinerAdapter<T> extends BaseAdapter {public static interface IOnItemSelectListener{public void onItemClick(int pos);}; private Context mContext; private List<T> mObjects = new ArrayList<T>(); private int mSelectItem = 0; private LayoutInflater mInflater; public AbstractSpinerAdapter(Context context){ init(context); } public void refreshData(List<T> objects, int selIndex){ mObjects = objects; if (selIndex < 0){ selIndex = 0; } if (selIndex >= mObjects.size()){ selIndex = mObjects.size() - 1; } mSelectItem = selIndex; } private void init(Context context) { mContext = context; mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Overridepublic int getCount() {return mObjects.size();}@Overridepublic Object getItem(int pos) {return mObjects.get(pos).toString();}@Overridepublic long getItemId(int pos) {return pos;}@Overridepublic View getView(int pos, View convertView, ViewGroup arg2) { ViewHolder viewHolder; if (convertView == null) { convertView = mInflater.inflate(R.layout.spiner_item_layout, null); viewHolder = new ViewHolder(); viewHolder.mTextView = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Object item = getItem(pos); viewHolder.mTextView.setText(item.toString()); return convertView;}public static class ViewHolder{ public TextView mTextView; }}
SpinerPopWindow
public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{private Context mContext;private ListView mListView;private AbstractSpinerAdapter mAdapter;private IOnItemSelectListener mItemSelectListener;public SpinerPopWindow(Context context){super(context);mContext = context;init();}public void setItemListener(IOnItemSelectListener listener){mItemSelectListener = listener;}public void setAdatper(AbstractSpinerAdapter adapter){mAdapter = adapter;mListView.setAdapter(mAdapter);}private void init(){View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);setContentView(view);setWidth(LayoutParams.WRAP_CONTENT);setHeight(LayoutParams.WRAP_CONTENT);setFocusable(true); ColorDrawable dw = new ColorDrawable(0x00);setBackgroundDrawable(dw);mListView = (ListView) view.findViewById(R.id.listview);mListView.setOnItemClickListener(this);}public <T> void refreshData(List<T> list, int selIndex){if (list != null && selIndex != -1){if (mAdapter != null){mAdapter.refreshData(list, selIndex);}}}@Overridepublic void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {dismiss();if (mItemSelectListener != null){mItemSelectListener.onItemClick(pos);}}}
CustemObject
public class CustemObject {public String data = "";@Overridepublic String toString() {// TODO Auto-generated method stubreturn data;}}
CustemSpinerAdapter
public class CustemSpinerAdapter extends AbstractSpinerAdapter<CustemObject>{public CustemSpinerAdapter(Context context) {super(context);}}
SpinerWindowDemoActivity
public class SpinerWindowDemoActivity extends Activity implements OnClickListener, AbstractSpinerAdapter.IOnItemSelectListener{ /** Called when the activity is first created. */private View mRootView;private TextView mTView;private ImageButton mBtnDropDown;private List<CustemObject> nameList = new ArrayList<CustemObject>();private AbstractSpinerAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } private void setupViews(){ mRootView = findViewById(R.id.rootView); mTView = (TextView) findViewById(R.id.tv_value);mBtnDropDown = (ImageButton) findViewById(R.id.bt_dropdown);mBtnDropDown.setOnClickListener(this);String[] names = getResources().getStringArray(R.array.hero_name);for(int i = 0; i < names.length; i++){CustemObject object = new CustemObject();object.data = names[i];nameList.add(object);}mAdapter = new CustemSpinerAdapter(this);mAdapter.refreshData(nameList, 0);mSpinerPopWindow = new SpinerPopWindow(this);mSpinerPopWindow.setAdatper(mAdapter);mSpinerPopWindow.setItemListener(this); }@Overridepublic void onClick(View view) {switch(view.getId()){case R.id.bt_dropdown:showSpinWindow();break;}}private void setHero(int pos){if (pos >= 0 && pos <= nameList.size()){CustemObject value = nameList.get(pos);mTView.setText(value.toString());}}private SpinerPopWindow mSpinerPopWindow;private void showSpinWindow(){Log.e("", "showSpinWindow");mSpinerPopWindow.setWidth(mTView.getWidth());mSpinerPopWindow.showAsDropDown(mTView);}@Overridepublic void onItemClick(int pos) {setHero(pos);}}
自定义一个类重写toString方法(CustemObject),自定义一个继承自AbstractSpinerAdapter的类确定对象类型(CustemSpinerAdapter)
构造具体的AbstractSpinerAdapter类对象(CustemSpinerAdapter)
通过refreshData填充数据,然后调用SpinerPopWindow的setAdatper设置数据源,OK大功告成!
新工程链接如下:http://download.csdn.net/detail/geniuseoe2012/5412647
OK,本节课到此为止!欲知更多Android-UI技巧,请关注窝的下一堂课~
更多精彩尽在http://blog.csdn.net/geniuseoe2012
welcome to join android develop group:298044305
上一课:Lance老师UI系列教程第六课->微信聊天气泡界面的实现
下一课: Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现
- Lance老师UI系列教程第二课->腾讯微博(下拉刷新+点击更多)listview的实现 (android)
- Lance老师UI系列教程第二课->腾讯微博(下拉刷新+点击更多)listview的实现 (android)
- Lance老师UI系列教程第二课->腾讯微博(下拉刷新+点击更多)listview的实现 (android)
- Lance老师UI系列教程第一课->QQ设置界面的实现(android)
- Lance老师UI系列教程第四课->微信TAB界面的实现
- Lance老师UI系列教程第六课->微信聊天气泡界面的实现
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- Lance老师UI系列教程第一课->QQ设置界面的实现(android)
- Lance老师UI系列教程第四课->微信TAB界面的实现
- Lance老师UI系列教程第六课->微信聊天气泡界面的实现
- Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现
- PLL和DLL:都是锁相环,区别在哪里?
- CentOS 安装mysql
- Collection接口方法
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- Git 的一些基本用法
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- 十个让你获得高质量外链资源的方法
- 入式系统工程师必须更聪明地工作
- MySQL常用命令
- 哈佛商业评论:中层经理的末路
- Integer包装类
- typedef __packed struct
- 词法分析器 c语言
- Iterator应用