Android自定义Spinner

来源:互联网 发布:js 跳转url 新页面 编辑:程序博客网 时间:2024/06/10 04:14

Android系统自带的spinner不是太好看,有时候需要我们自己去改变它的样子,需要自定义spinner:
首先主界面的样子main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/layout"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#ffffff"    android:orientation="horizontal" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="15dp"        android:text="地点名字 :"        android:textColor="#000000"        android:textSize="20dp" />    <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" /></LinearLayout>

spinner.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="0.0dip" >    <LinearLayout        android:id="@+id/title"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="#defafd"        android:padding="10.0dip" >        <ImageView            android:id="@+id/icon"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginRight="10.0dip"             />        <TextView            android:id="@+id/place"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_toRightOf="@id/icon"            android:text="请选择地点:"            android:textColor="#0182af"            android:textSize="20.0dip" />    </LinearLayout>    <ListView        android:id="@+id/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>

spinner的item的样子:
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/tv_item"        android:layout_width="wrap_content"        android:layout_height="50dp"        android:layout_marginLeft="25dp"        android:gravity="center_vertical"        android:textColor="#000000"        android:textSize="16dp" /></LinearLayout>

接下来就是各自的class:
首先要重写spinner,继承spinner

import java.util.ArrayList;import android.app.Dialog;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.Spinner;public class MySpinner extends Spinner implements OnItemClickListener {    public static Dialog 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.spinner, null);        final ListView listview = (ListView) view                .findViewById(R.id.list);        ListviewAdapter adapters = new ListviewAdapter(context, getList());        listview.setAdapter(adapters);        listview.setOnItemClickListener(this);        dialog = new Dialog(context, R.style.dialog);//创建Dialog并设置样式主题        LayoutParams params = new LayoutParams(600, 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;    }}

接下来是adapter

import java.util.ArrayList;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;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() {        return list.size()>0?list.size():0;    }    @Override    public Object getItem(int position) {        return position;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {            convertView = LayoutInflater.from(context).inflate(R.layout.item, null);            TextView textView = (TextView)convertView.findViewById(R.id.tv_item);            textView.setText(list.get(position));        return convertView;    }}

最后是main

import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.view.KeyEvent;import android.widget.ArrayAdapter;public class SpinnerTestMainActivity extends Activity {    public static ArrayList<String> list = new ArrayList<String>();    private ArrayAdapter<String> adapter;    private MySpinner spinner;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        list.add("北京");        list.add("上海");        list.add("天津");        list.add("广州");        list.add("深圳");        list.add("石家庄");        list.add("太原");        list.add("西安");        list.add("长沙");        spinner = (MySpinner)findViewById(R.id.spinner);        spinner.setList(list);        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);        spinner.setAdapter(adapter);    }}

OK这样就可以了

0 0
原创粉丝点击