参考:http://blog.csdn.net/wanglj0925/article/details/7683237
Java代码:
package com.gdseed.canvastestboard;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
public class MySpinner extends Spinner implements OnItemClickListener {
private static DialogPopup mPopup = null;
private SpinnerAdapter mAdapter = null;
private String str = "";
public MySpinner(Context context) {
super(context);
}
public MySpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MySpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean performClick() {
Context context = getContext();
final LayoutInflater inflater = LayoutInflater.from(context);
final View view = inflater.inflate(R.layout.formcustomspinner, null);
final TextView lable = (TextView) view.findViewById(R.id.label);
lable.setText(str);
final ListView listview = (ListView) view.findViewById(R.id.formcustomspinner_list);
ListviewAdapter adapters = new ListviewAdapter(context, mAdapter);
listview.setAdapter(adapters);
listview.setOnItemClickListener(this);
mPopup = new DialogPopup(context, R.style.dialog);
LayoutParams params = new LayoutParams(500, LayoutParams.FILL_PARENT);
mPopup.setCanceledOnTouchOutside(true);
mPopup.show();
mPopup.addContentView(view, params);
return true;
}
@Override
public void setAdapter(SpinnerAdapter adapter) {
super.setAdapter(adapter);
mAdapter = adapter;
}
@Override
public void setPrompt(CharSequence prompt) {
super.setPrompt(prompt);
str = prompt.toString();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
setSelection(position);
if (mPopup != null) {
mPopup.dismiss();
mPopup = null;
}
}
class DialogPopup extends AlertDialog {
public DialogPopup(Context context) {
super(context);
}
public DialogPopup(Context context, int theme) {
super(context, theme);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.slt_cnt_type);
}
}
class ViewHolder {
public TextView textView;
}
class ListviewAdapter extends BaseAdapter {
private Context context;
private SpinnerAdapter tempAdapter;
public ListviewAdapter(Context context, SpinnerAdapter adapter) {
this.context = context;
this.tempAdapter = adapter;
}
@Override
public int getCount() {
return tempAdapter.getCount();
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ViewHolder viewHolder = null;
if (arg1 == null && tempAdapter.getCount() != 0) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(context);
arg1 = inflater.inflate(R.layout.dialog_item, null);
viewHolder.textView = (TextView)arg1.findViewById(R.id.itemText);
arg1.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) arg1.getTag();
}
viewHolder.textView.setText(tempAdapter.getItem(arg0).toString());
return arg1;
}
}
}
formcustomspinner.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/background_light"
android:orientation="vertical"
android:padding="0dp" >
<LinearLayout
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="30dp"
android:gravity="center_horizontal"
android:background="#defafd"
android:padding="3dp" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/tick" />
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/icon"
android:layout_marginTop="2dp"
android:textColor="#0099cc"
android:textSize="12sp" />
</LinearLayout>
<ListView
android:id="@+id/formcustomspinner_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:cacheColorHint="@null"
android:divider="@android:drawable/divider_horizontal_bright"
android:scrollbars="none" />
</LinearLayout>
dialog_item.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/itemText"
android:layout_width="wrap_content"
android:layout_height="14dp"
android:layout_marginLeft="7dp"
android:gravity="center_vertical"
android:textColor="#008833"
android:textSize="8sp" />
</LinearLayout>
自定义Spinner已经完成,应用和真正的Spinner大致相同!