Androidの自定义Spinner实现
1.有时候因为项目的界面风格 很多控件如果使用原生的样式感觉会与整体风格有些不搭 所以需要自定义样式 ,很多项目中自定义控件都是必不可少的 这里参考网上的一些资料 实现了一个自定义Spinner 记录下 加深印象
先来看代码,,定义主类
public class SpinnerTestActivity extends Activity {
public static ArrayList<String> list = new ArrayList<String>();
private ArrayAdapter<String> adapter;
private CustomerSpinner spinner;
@Override
public 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" />
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监听器,调用此方法来执行
@Override
public 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外部任意区域关闭Dialog
dialog.show();
dialog.addContentView(view, params);
return true;
}
@Override
public 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;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public 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);
}else
viewHolder = (ViewHolder) arg1.getTag();
viewHolder.textView.setText(list.get(arg0));
return arg1;
}
}