1.下拉列表使用Spinner。
創新互聯公司自成立以來,一直致力于為企業提供從網站策劃、網站設計、成都做網站、網站建設、電子商務、網站推廣、網站優化到為企業提供個性化軟件開發等基于互聯網的全面整合營銷服務。公司擁有豐富的網站建設和互聯網應用系統開發管理經驗、成熟的應用系統解決方案、優秀的網站開發工程師團隊及專業的網站設計師團隊。
2.布局:
Spinner android:id="@+id/Spinner01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/Spinner
3.實現
1)新增選擇內容:String[] m={"A型","B型","O型","AB型","其他"};
2)初始化設配器:
private ArrayAdapterString adapter = new ArrayAdapterString(this,android.R.layout.simple_spinner_item,m);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //設置下拉列表的風格
spinner.setAdapter(adapter);//將adapter 添加到spinner中
spinner.setOnItemSelectedListener(new SpinnerSelectedListener()); //添加事件Spinner事件監聽
3)新建Spinner監聽器
class SpinnerSelectedListener implements OnItemSelectedListener{
public void onItemSelected(AdapterView? arg0, View arg1, int arg2,
long arg3) {
view.setText("你選擇的值:"+m[arg2]);//設置編輯框為獲取到的選擇值
}
public void onNothingSelected(AdapterView? arg0) {
}
}
一、概述
Android中的有個原生的下拉列表控件Spinner,但是這個控件有時候不符合我們自己的要求,
比如有時候我們需要類似windows 或者web網頁中常見的那種下拉列表控件,類似下圖這樣的:
這個時候只有自己動手寫一個了。其實實現起來不算很難,
本文實現的方案是采用TextView +ImageView+PopupWindow的組合方案。
先來看看我們的自己寫的控件效果圖吧:(源碼在文章下面最后給出哈!)
二、自定義下拉列表框控件的實現
1. 自定義控件用到的布局文件和資源:
結果框的布局頁面:dropdownlist_view.xml:
?xml version="1.0" encoding="utf-8"?
RelativeLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/compound"
android:background="@drawable/dropdown_bg_selector"
TextView
android:id="@+id/text"
android:layout_width="250dp"
android:layout_height="40dp"
android:paddingLeft="10dp"
android:text="文本文字"
android:gravity="center_vertical"
android:textSize="14sp"
android:padding="5dp"
android:singleLine="true" /
ImageView
android:id="@+id/btn"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_toRightOf="@+id/text"
android:src="@drawable/dropdown"
android:padding="5dp"
android:layout_centerVertical="true"
android:gravity="center"/
/RelativeLayout
下拉彈窗列表布局頁面:dropdownlist_popupwindow.xml:
?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
ListView
android:id="@+id/listView"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:divider="#666666"
android:dividerHeight="1dp"
/ListView
/LinearLayout
selector資源文件:
dropdown_list_selector.xml:
?xml version="1.0" encoding="utf-8"?
selector xmlns:android=""
item android:state_pressed="true" android:drawable="@color/dropdownlist_item_press"/
item android:drawable="@color/dropdownlist_item"/
/selector
dropdown_bg_selector.xml:
?xml version="1.0" encoding="utf-8"?
selector xmlns:android=""
item android:state_pressed="true" android:drawable="@color/dropdownlist_press"/
item android:drawable="@color/dropdownlist_bg"/
/selector
2. 自定義下拉列表框控件類的實現:
我們采用了TextView+ImageView+PopupWindow的組合方案,所以我的自定義控件需要重寫ViewGroup,由于我們已經知道了,布局方向為豎直方向,所以這里,
我直接繼承LinearLayout來寫這個控件。具體實現代碼如下:
package com.czm.xcdropdownlistview;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
@SuppressLint("NewApi")
/**
* 下拉列表框控件
* @author caizhiming
*
*/
public class XCDropDownListView extends LinearLayout{
private TextView editText;
private ImageView imageView;
private PopupWindow popupWindow = null;
private ArrayListString dataList = new ArrayListString();
private View mView;
public XCDropDownListView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}
public XCDropDownListView(Context context, AttributeSet attrs) {
this(context, attrs,0);
// TODO Auto-generated constructor stub
}
public XCDropDownListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
initView();
}
public void initView(){
String infServie = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater layoutInflater;
layoutInflater = (LayoutInflater) getContext().getSystemService(infServie);
View view = layoutInflater.inflate(R.layout.dropdownlist_view, this,true);
editText= (TextView)findViewById(R.id.text);
imageView = (ImageView)findViewById(R.id.btn);
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(popupWindow == null ){
showPopWindow();
}else{
closePopWindow();
}
}
});
}
/**
* 打開下拉列表彈窗
*/
private void showPopWindow() {
// 加載popupWindow的布局文件
String infServie = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater layoutInflater;
layoutInflater = (LayoutInflater) getContext().getSystemService(infServie);
View contentView = layoutInflater.inflate(R.layout.dropdownlist_popupwindow, null,false);
ListView listView = (ListView)contentView.findViewById(R.id.listView);
listView.setAdapter(new XCDropDownListAdapter(getContext(), dataList));
popupWindow = new PopupWindow(contentView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(getResources().getDrawable(R.color.transparent));
popupWindow.setOutsideTouchable(true);
popupWindow.showAsDropDown(this);
}
/**
* 關閉下拉列表彈窗
*/
private void closePopWindow(){
popupWindow.dismiss();
popupWindow = null;
}
/**
* 設置數據
* @param list
*/
public void setItemsData(ArrayListString list){
dataList = list;
editText.setText(list.get(0).toString());
}
/**
* 數據適配器
* @author caizhiming
*
*/
class XCDropDownListAdapter extends BaseAdapter{
Context mContext;
ArrayListString mData;
LayoutInflater inflater;
public XCDropDownListAdapter(Context ctx,ArrayListString data){
mContext = ctx;
mData = data;
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
// 自定義視圖
ListItemView listItemView = null;
if (convertView == null) {
// 獲取list_item布局文件的視圖
convertView = inflater.inflate(R.layout.dropdown_list_item, null);
listItemView = new ListItemView();
// 獲取控件對象
listItemView.tv = (TextView) convertView
.findViewById(R.id.tv);
listItemView.layout = (LinearLayout) convertView.findViewById(R.id.layout_container);
// 設置控件集到convertView
convertView.setTag(listItemView);
} else {
listItemView = (ListItemView) convertView.getTag();
}
// 設置數據
listItemView.tv.setText(mData.get(position).toString());
final String text = mData.get(position).toString();
listItemView.layout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
editText.setText(text);
closePopWindow();
}
});
return convertView;
}
}
private static class ListItemView{
TextView tv;
LinearLayout layout;
}
}
三、如何使用該自定義下拉列表框控件
使用該控件和使用普通的自帶的控件一樣,首先需要在布局文件中引用該控件:
RelativeLayout xmlns:android=""
xmlns:tools=""
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.czm.xcdropdownlistview.MainActivity"
tools:ignore="MergeRootFrame"
com.czm.xcdropdownlistview.XCDropDownListView
android:id="@+id/drop_down_list_view"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" /
/RelativeLayout
其次,就是在代碼中使用該控件:
package com.czm.xcdropdownlistview;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
/**
* 使用下拉列表框控件 示例
* @author caizhiming
*
*/
public class MainActivity extends Activity {
XCDropDownListView dropDownListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dropDownListView = (XCDropDownListView)findViewById(R.id.drop_down_list_view);
ArrayListString list = new ArrayListString();
for(int i = 0;i 6;i++){
list.add("下拉列表項"+(i+1));
}
dropDownListView.setItemsData(list);
}
}
對了,這個控件中,我沒有實現點擊item項回調接口,這個可能對有些寫慣了回調的可能覺得少了寫什么的感覺,有興趣的你可以自己添加相關回調操作哈,這個大家應該都會把。
你是說狀態欄吧。那個可以顯示未接來電,新來短信,正在運行的一些程序(比如QQ)
下拉就行~
在UI中經常會使用到下拉列表,在android控件中有兩個下拉列表控件:
在xml中添加控件的使用:
主題:
這些都沒有達到我要的效果:
android:entries // 傳入的是values文件夾下的arrayx.xml內的數據
android:spinnerMode //顯示模式有popmenu和dialog兩種
android:prompt //當顯示模式為dialog時生效,作用為顯示dialog的標題內容
當前標題:android的下拉列表,android的下拉列表的默認值
路徑分享:http://vcdvsql.cn/article6/dsdedog.html
成都網站建設公司_創新互聯,為您提供動態網站、響應式網站、、網站維護、營銷型網站建設、App設計
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯