Android 实现自定义Spinner
有时候因为项目的界面风格 很多控件如果使用原生的样式感觉会与整体风格有些不搭 所以需要自定义样式 很多项目中自定义控件都是必不可少的 这里参考网上的一些资料 实现了一个自定义Spinner 记录下 加深印象
效果图:
弹框是通过一个重写的Dialog和Listview实现
第一步 重写Dialog类SelectDialog.java
import import import public SelectDialog AlertDialog {
- SelectDialog(Context context, theme) {
- (context, theme);
- SelectDialog(Context context) {
- (context);
- onCreate(Bundle savedInstanceState) {
- .onCreate(savedInstanceState);
- }
第二步重写Spinner类CustomerSpinner.java
import import import import import import import import import public CustomerSpinner Spinner OnItemClickListener {
- SelectDialog dialog = ;
- ArrayList<String> list;
- String text;
- CustomerSpinner(Context context, AttributeSet attrs) {
- (context, attrs);
- performClick() {
- LayoutInflater inflater = LayoutInflater.from(getContext());
- View view = inflater.inflate(R.layout.formcustomspinner, );
- ListView listview = (ListView) view
- ListviewAdapter(context, getList());
- );
- SelectDialog(context, R.style.dialog);
- LayoutParams params = LayoutParams(, LayoutParams.FILL_PARENT);
- );
- dialog.show();
- ;
- onItemClick(AdapterView<?> view, View itemView, position,
- id) {
- setSelection(position);
- (dialog != ) {
- ;
- ArrayList<String> getList() {
- list;
- }
- setList(ArrayList<String> list) {
- .list = list;
- }
- String getText() {
- text;
- }
- setText(String text) {
- .text = text;
- }
- }
这里用Listview来显示数据 ArrayList<String> list存储所要显示的数据 text存储每次spinner选中的值 在监听spinner并获取当前选中的值的时候用到
dialog的样式设置:styles.xml
<? = =?> <> = => =></>
- =></>
- =></>
- =></>
- =></>
- > </>
Listview的代码很简单 自己写一个adapter就好了
第三步 在xml文件中引用自定义的spinner
main.xml
<? = =?> < =
- = =
- = = =
- = =
- == =
- =/> =
- = = =
- =/> </>
到这里差不多就完成了 不过这个还有个缺陷 每次使用时通过 spinner.setList(list);为其加载数据 当程序返回或者退出这个节目在进入时 listview中的数据会重复 这里只能通过这个办法来解决了
@Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- == KeyEvent.KEYCODE_BACK){
- list.clear();
- }
每次返回或退出时 清空list 就可以啦
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。