Android中自訂下拉樣式Spinner

來源:互聯網
上載者:User

標籤:android   控制項   自訂spinner   

Android中自訂下拉樣式Spinner


本文繼續介紹android自訂控制項系列,自訂Spinner控制項的使用。


實現思路

1.定義下拉控制項布局(ListView及子控制項布局)

2.自訂SpinerPopWindow類

3.定義填充資料的Adapter






一、定義控制項布局

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#f2f2f2"    android:orientation="vertical"    android:padding="5dp" >    <LinearLayout        android:id="@+id/layout"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="5dp"        android:background="#cbcbcb"        android:orientation="vertical"        android:padding="0.2px" >        <RelativeLayout            android:layout_width="wrap_content"            android:layout_height="42dp" >            <TextView                android:id="@+id/tv_value"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:layout_centerVertical="true"                android:layout_marginRight="50dp"                android:background="#fff"                android:ellipsize="end"                android:gravity="left|center"                android:hint="請選擇"                android:paddingLeft="10dp"                android:singleLine="true"                android:textColor="#ff000000"                android:textSize="18dp" >            </TextView>            <LinearLayout                android:id="@+id/bt_dropdown"                android:layout_width="50dp"                android:layout_height="match_parent"                android:layout_alignParentRight="true"                android:background="#fff"                android:gravity="center"                android:onClick="onClick" >                <ImageView                    android:layout_width="20dp"                    android:layout_height="15dp"                    android:background="@drawable/down_arrow" />            </LinearLayout>        </RelativeLayout>    </LinearLayout></RelativeLayout>

二、定義SpinerPopWindow類

package org.gaochun.widget;import java.util.List;import org.gaochun.R;import org.gaochun.adapter.SpinerAdapter;import org.gaochun.adapter.SpinerAdapter.IOnItemSelectListener;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.PopupWindow;/** * 自訂SpinerPopWindow類 * @author gao_chun * */public class SpinerPopWindow extends PopupWindow implements OnItemClickListener{    private Context mContext;    private ListView mListView;    private SpinerAdapter mAdapter;    private IOnItemSelectListener mItemSelectListener;    public SpinerPopWindow(Context context)    {        super(context);        mContext = context;        init();    }    public void setItemListener(IOnItemSelectListener listener){        mItemSelectListener = listener;    }    public void setAdatper(SpinerAdapter adapter){        mAdapter = adapter;        mListView.setAdapter(mAdapter);    }    private void init()    {        View view = LayoutInflater.from(mContext).inflate(R.layout.spiner_window_layout, null);        setContentView(view);        setWidth(LayoutParams.WRAP_CONTENT);        setHeight(LayoutParams.WRAP_CONTENT);        setFocusable(true);        ColorDrawable dw = new ColorDrawable(0x00);        setBackgroundDrawable(dw);        mListView = (ListView) view.findViewById(R.id.listview);        mListView.setOnItemClickListener(this);    }    public void refreshData(List<String> list, int selIndex)    {        if (list != null && selIndex  != -1)        {            if (mAdapter != null){                mAdapter.refreshData(list, selIndex);            }        }    }    @Override    public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) {        dismiss();        if (mItemSelectListener != null){            mItemSelectListener.onItemClick(pos);        }    }}

三、定義Adapter

package org.gaochun.adapter;import java.util.List;import org.gaochun.R;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 SpinerAdapter extends BaseAdapter {    public static interface IOnItemSelectListener{        public void onItemClick(int pos);    };    private List<String> mObjects;    private LayoutInflater mInflater;    public SpinerAdapter(Context context,List<String> mObjects){        this.mObjects = mObjects;        mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    }    public void refreshData(List<String> objects, int selIndex){        mObjects = objects;        if (selIndex < 0){            selIndex = 0;        }        if (selIndex >= mObjects.size()){            selIndex = mObjects.size() - 1;        }    }    @Override    public int getCount() {        return mObjects.size();    }    @Override    public Object getItem(int pos) {        return mObjects.get(pos).toString();    }    @Override    public long getItemId(int pos) {        return pos;    }    @Override    public View getView(int pos, View convertView, ViewGroup arg2) {        ViewHolder viewHolder;        if (convertView == null) {            convertView = mInflater.inflate(R.layout.spiner_item_layout, null);            viewHolder = new ViewHolder();            viewHolder.mTextView = (TextView) convertView.findViewById(R.id.textView);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        //Object item =  getItem(pos);        viewHolder.mTextView.setText(mObjects.get(pos));        return convertView;    }    public static class ViewHolder    {        public TextView mTextView;    }}


四、調用樣本

public class MainActivity extends Activity implements OnClickListener,SpinerAdapter.IOnItemSelectListener{    private List<String>  mListType = new ArrayList<String>();  //類型列表    private TextView mTView;    private SpinerAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_search);        mTView = (TextView) findViewById(R.id.tv_value);        //初始化資料        String[] names = getResources().getStringArray(R.array.array_name);        for(int i = 0; i < names.length; i++){            mListType.add(names[i]);        }        mAdapter = new SpinerAdapter(this,mListType);        mAdapter.refreshData(mListType,0);        //顯示第一條資料        //mTView.setText(names[0]);        //初始化PopWindow        mSpinerPopWindow = new SpinerPopWindow(this);        mSpinerPopWindow.setAdatper(mAdapter);        mSpinerPopWindow.setItemListener(this);    }    //設定PopWindow    private SpinerPopWindow mSpinerPopWindow;    private void showSpinWindow(){        Log.e("", "showSpinWindow");        mSpinerPopWindow.setWidth(mTView.getWidth());        mSpinerPopWindow.showAsDropDown(mTView);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.bt_dropdown:                showSpinWindow();                break;        }    }    /* (non-Javadoc)     * @see org.gaochun.adapter.SpinerAdapter.IOnItemSelectListener#onItemClick(int)     */    @Override    public void onItemClick(int pos) {        // TODO Auto-generated method stub        if (pos >= 0 && pos <= mListType.size()){            String value = mListType.get(pos);            mTView.setText(value.toString());        }    }}


源碼下載:http://download.csdn.net/download/gao_chun/8653069




五、自訂控制項系列

Android項目中使用自訂進度載入Dialog:http://blog.csdn.net/gao_chun/article/details/45270031

ListView中按鈕監聽器 設定 及 最佳化:http://blog.csdn.net/gao_chun/article/details/41249131

Android項目中自訂頂部標題列:http://blog.csdn.net/gao_chun/article/details/45255929

Android自訂設定圓形圖片控制項:http://blog.csdn.net/gao_chun/article/details/39207557

android自訂底部Tab,項目整體介面架構:http://blog.csdn.net/gao_chun/article/details/37903673

自訂AlertDialog提示框:http://blog.csdn.net/gao_chun/article/details/37757571


轉載註明出處.

Android中自訂下拉樣式Spinner

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.