Androidの自定义Spinner实现
16lz
2021-01-24
Androidの自定义Spinner实现
1.有时候因为项目的界面风格 很多控件如果使用原生的样式感觉会与整体风格有些不搭 所以需要自定义样式 ,很多项目中自定义控件都是必不可少的 这里参考网上的一些资料 实现了一个自定义Spinner 记录下 加深印象
先来看代码,,定义主类
然后需要重写一个自定义的CustomerSpinner对象继承自Spinner
自定义中,需要添加list,需要adapter时候。
最后,附上源码: 自定义spinner源码下载
1.有时候因为项目的界面风格 很多控件如果使用原生的样式感觉会与整体风格有些不搭 所以需要自定义样式 ,很多项目中自定义控件都是必不可少的 这里参考网上的一些资料 实现了一个自定义Spinner 记录下 加深印象
先来看代码,,定义主类
public class SpinnerTestActivity extends Activity {public static ArrayList<String> list = new ArrayList<String>();private ArrayAdapter<String> adapter;private CustomerSpinner spinner;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();spinner = (CustomerSpinner) findViewById(R.id.spinner);spinner.setList(list);adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);spinner.setAdapter(adapter);}public void init() {list.add("路飞");list.add("索隆");list.add("山治");}}在这里自定义一个spinner组件,我们看下对应xml。
<com.spinner.test.CustomerSpinner android:id="@+id/spinner" android:layout_width="150dp" android:layout_height="50dp" android:layout_marginTop="15dp" android:background="@drawable/bg_spinner" />
然后需要重写一个自定义的CustomerSpinner对象继承自Spinner
public class CustomerSpinner extends Spinner implements OnItemClickListener {public static SelectDialog dialog = null;private ArrayList<String> list;// ArrayList<String> list存储所要显示的数据public static String text;public CustomerSpinner(Context context, AttributeSet attrs) {super(context, attrs);}// 如果视图定义了OnClickListener监听器,调用此方法来执行@Overridepublic boolean performClick() {Context context = getContext();final LayoutInflater inflater = LayoutInflater.from(getContext());final View view = inflater.inflate(R.layout.formcustomspinner, null);final ListView listview = (ListView) view.findViewById(R.id.formcustomspinner_list);ListviewAdapter adapters = new ListviewAdapter(context, getList());listview.setAdapter(adapters);listview.setOnItemClickListener(this);dialog = new SelectDialog(context, R.style.dialog);// 创建Dialog并设置样式主题LayoutParams params = new LayoutParams(650, LayoutParams.FILL_PARENT);dialog.setCanceledOnTouchOutside(true);// 设置点击Dialog外部任意区域关闭Dialogdialog.show();dialog.addContentView(view, params);return true;}@Overridepublic void onItemClick(AdapterView<?> view, View itemView, int position,long id) {setSelection(position);setText(list.get(position));if (dialog != null) {dialog.dismiss();dialog = null;}}public ArrayList<String> getList() {return list;}public void setList(ArrayList<String> list) {this.list = list;}public String getText() {return text;}public void setText(String text) {this.text = text;}}
自定义中,需要添加list,需要adapter时候。
public class ListviewAdapter extends BaseAdapter {private Context context;private ArrayList<String> list;public ListviewAdapter(Context context,ArrayList<String> list){this.context = context;this.list = list;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {ViewHolder viewHolder = null;if(arg1 == null&&list.size() != 0){viewHolder = new ViewHolder();LayoutInflater inflater = LayoutInflater.from(context);arg1 = inflater.inflate(R.layout.item, null);viewHolder.textView = (TextView)arg1.findViewById(R.id.itemText);arg1.setTag(viewHolder);}elseviewHolder = (ViewHolder) arg1.getTag();viewHolder.textView.setText(list.get(arg0));return arg1;}}
最后,附上源码: 自定义spinner源码下载
更多相关文章
- android中自定义ViewGroup的实现
- 【转】Android(安卓)statusBar添加back,home,menu按钮
- Android(安卓)Widget工具箱
- android 模拟器 自定义分辨率 没有键盘
- Android中自定义ListView无法响应OnItemClickListener中的onItem
- Android(安卓)Timer计时器
- Andriod 实现可拖动列表
- android之listview使用方法(一)
- Android软件开发之盘点自定义View界面大合集(二)