Androidの自定义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源码下载





更多相关文章

  1. android中自定义ViewGroup的实现
  2. 【转】Android(安卓)statusBar添加back,home,menu按钮
  3. Android(安卓)Widget工具箱
  4. android 模拟器 自定义分辨率 没有键盘
  5. Android中自定义ListView无法响应OnItemClickListener中的onItem
  6. Android(安卓)Timer计时器
  7. Andriod 实现可拖动列表
  8. android之listview使用方法(一)
  9. Android软件开发之盘点自定义View界面大合集(二)

随机推荐

  1. android8.0屏蔽状态栏下拉
  2. 设置Textview最大长度,超出显示省略号
  3. Android(安卓)屏幕滑动事件
  4. Android(安卓)创建悬停通知栏
  5. Android加密算法:AES、Base64加密算法
  6. 第一行代码Android第三课
  7. 10 Must-Have Android(安卓)Tools for De
  8. 2011.09.20(4)——— android SpannableStr
  9. Android(安卓)ADT & SDK离线下载地址
  10. 2011.11.22——— android jni简单用法