android可編輯的下拉框Demo

 最終實現效果:

項目目錄結構:

EditDropdownTextboxActivity.java
 

Java代碼    
1. package com.royal.editDropdownTextbox;  
2.  
3. import java.util.ArrayList;  
4. import java.util.List;  
5.  
6. import android.app.Activity;  
7. import android.content.Context;  
8. import android.os.Bundle;  
9. import android.view.LayoutInflater;  
10. import android.view.MotionEvent;  
11. import android.view.View;  
12. import android.view.View.OnClickListener;  
13. import android.view.View.OnTouchListener;  
14. import android.view.ViewGroup;  
15. import android.widget.BaseAdapter;  
16. import android.widget.EditText;  
17. import android.widget.ImageButton;  
18. import android.widget.LinearLayout.LayoutParams;  
19. import android.widget.ListView;  
20. import android.widget.PopupWindow;  
21. import android.widget.TextView;  
22.  
23. /** 
24.  * 可編輯的下拉框Demo 
25.  * @author royal 
26.  * 
27.  */ 
28. public class EditDropdownTextboxActivity extends Activity {  
29.  
30.     private ImageButton ibtn_dropDown;  
31.     private PopupWindow pop;  
32.     private PopupAdapter adapter;  
33.     private ListView listView;  
34.     private EditText et_username;  
35.     // popupWindow listView是否顯示  
36.     private boolean isShow = false;  
37.     private List<String> names;  
38.  
39.     @Override 
40.     public void onCreate(Bundle savedInstanceState) {  
41.         super.onCreate(savedInstanceState);  
42.         setContentView(R.layout.main);  
43.         ibtn_dropDown = (ImageButton) findViewById(R.id.ibtn_dropDown);  
44.         et_username = (EditText) findViewById(R.id.et_username);  
45.  
46.         // 圖片按鈕監聽  
47.         setUpIbtnListeners();  
48.  
49.         names = new ArrayList<String>();  
50.         names.add("曹操");  
51.         names.add("劉備");  
52.         names.add("孫權");  
53.     }  
54.  
55.     /** 
56.      * 圖片按鈕監聽 www.aiwalls.com  
57.      */ 
58.     public void setUpIbtnListeners() {  
59.         ibtn_dropDown.setOnClickListener(new OnClickListener() {  
60.             @Override 
61.             public void onClick(View v) {  
62.                 if (pop == null) {  
63.                     if (adapter == null) {  
64.                         adapter = new PopupAdapter(EditDropdownTextboxActivity.this);  
65.                         listView = new ListView(EditDropdownTextboxActivity.this);  
66.                         pop = new PopupWindow(listView, et_username.getWidth(), LayoutParams.WRAP_CONTENT);  
67.                         listView.setAdapter(adapter);  
68.                         pop.showAsDropDown(et_username);  
69.                         isShow = true;  
70.                     }  
71.                 } else if (isShow) {  
72.                     pop.dismiss();  
73.                     isShow = false;  
74.                 } else if (!isShow) {  
75.                     pop.showAsDropDown(et_username);  
76.                     isShow = true;  
77.                 }  
78.             }  
79.  
80.         });  
81.     }  
82.  
83.     /** 
84.      * 自定義適配器,PopupWindow listView的數據處理 
85.      *  
86.      * @author royal 
87.      *  
88.      */ 
89.     class PopupAdapter extends BaseAdapter {  
90.  
91.         private LayoutInflater layoutInflater;  
92.         private Context context;  
93.  
94.         public PopupAdapter() {  
95.  
96.         }  
97.  
98.         public PopupAdapter(Context context) {  
99.             this.context = context;  
100.         }  
101.  
102.         @Override 
103.         public int getCount() {  
104.             return names.size();  
105.         }  
106.  
107.         @Override 
108.         public Object getItem(int position) {  
109.             return null;  
110.         }  
111.  
112.         @Override 
113.         public long getItemId(int position) {  
114.             return position;  
115.         }  
116.  
117.         @Override 
118.         public View getView(final int position, View convertView, ViewGroup parent) {  
119.             Holder holder = null;  
120.             final String name = names.get(position);  
121.             if (convertView == null) {  
122.                 layoutInflater = LayoutInflater.from(context);  
123.                 convertView = layoutInflater.inflate(R.layout.popup, null);  
124.                 holder = new Holder();  
125.                 holder.tv = (TextView) convertView.findViewById(R.id.tv_account);  
126.                 holder.ibtn = (ImageButton) convertView.findViewById(R.id.ibtn_delete);  
127.                 convertView.setTag(holder);  
128.             } else {  
129.                 holder = (Holder) convertView.getTag();  
130.             }  
131.             if (holder != null) {  
132.                 convertView.setId(position);  
133.                 holder.setId(position);  
134.                 holder.tv.setText(name);  
135.                 holder.tv.setOnTouchListener(new OnTouchListener() {  
136.  
137.                     @Override 
138.                     public boolean onTouch(View v, MotionEvent event) {  
139.                         // TODO Auto-generated method stub  
140.  
141.                         pop.dismiss();  
142.                         isShow = false;  
143.                         et_username.setText(name);  
144.                         return true;  
145.                     }  
146.                 });  
147.  
148.                 holder.ibtn.setOnClickListener(new OnClickListener() {  
149.  
150.                     @Override 
151.                     public void onClick(View v) {  
152.                         names.remove(position);  
153.                         adapter.notifyDataSetChanged();  
154.                     }  
155.                 });  
156.             }  
157.             return convertView;  
158.         }  
159.  
160.         class Holder {  
161.             TextView tv;  
162.             ImageButton ibtn;  
163.  
164.             void setId(int position) {  
165.                 tv.setId(position);  
166.                 ibtn.setId(position);  
167.             }  
168.         }  
169.  
170.     }  
171. } 
 
2個佈局文件
 
main.xml
Java代碼    
1. <?xml version="1.0" encoding="utf-8"?>  
2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
3.     android:layout_width="fill_parent" 
4.     android:layout_height="fill_parent" 
5.     android:orientation="vertical" >  
6.  
7.     <!– 用戶名 輸入框 –>  
8.  
9.     <EditText  
10.         android:id="@+id/et_username" 
11.         android:layout_width="fill_parent" 
12.         android:layout_height="wrap_content" 
13.         android:layout_alignParentTop="true" 
14.         android:background="@drawable/username_edit" 
15.         android:hint="@string/inputUsername" 
16.         android:maxLength="20" 
17.         android:paddingLeft="60.0dip" 
18.         android:saveEnabled="true" />  
19.  
20.     <!– 用戶名 –>  
21.  
22.     <TextView  
23.         android:id="@+id/tv_username" 
24.         android:layout_width="wrap_content" 
25.         android:layout_height="wrap_content" 
26.         android:layout_alignBaseline="@+id/et_username" 
27.         android:paddingLeft="7.0dip" 
28.         android:text="@string/username" 
29.         android:textColor="#ff3f3f3f" 
30.         android:textSize="16.0dip" />  
31.  
32.     <!– 下拉按鈕 –>  
33.  
34.     <ImageButton  
35.         android:id="@+id/ibtn_dropDown" 
36.         android:layout_width="wrap_content" 
37.         android:layout_height="wrap_content" 
38.         android:layout_alignBottom="@+id/et_username" 
39.         android:layout_alignRight="@+id/et_username" 
40.         android:layout_alignTop="@+id/et_username" 
41.         android:layout_marginRight="1.0dip" 
42.         android:background="@drawable/dropdown_select" />  
43.  
44. </RelativeLayout> 
 
popup.xml
Java代碼    
1. <?xml version="1.0" encoding="utf-8"?>  
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
3.     android:id="@+id/popup_linear" 
4.     android:layout_width="wrap_content" 
5.     android:layout_height="wrap_content" 
6.     android:gravity="center_vertical" 
7.     android:orientation="horizontal" >  
8.  
9.     <ImageView  
10.         android:layout_width="wrap_content" 
11.         android:layout_height="wrap_content" 
12.         android:layout_marginLeft="3dip" 
13.         android:src="@drawable/user" >  
14.     </ImageView>  
15.  
16.     <TextView  
17.         android:id="@+id/tv_account" 
18.         android:layout_width="wrap_content" 
19.         android:layout_height="wrap_content" 
20.         android:layout_marginLeft="17dip" 
21.         android:layout_weight="1" >  
22.     </TextView>  
23.  
24.     <ImageButton  
25.         android:id="@+id/ibtn_delete" 
26.         android:layout_width="wrap_content" 
27.         android:layout_height="wrap_content" 
28.         android:layout_marginRight="10dip" 
29.         android:background="@drawable/delete" >  
30.     </ImageButton>  
31.  
32. </LinearLayout> 
 
其他就沒什麼特殊的瞭。
 
強調自己的是:玩這些demo要註意自己android的版本 ,不然可能導入別人的項目到自己環境中跑不起來;如果這樣可以試試自己拷貝代碼到自己的項目中。

 
摘自 蕭_瑟BLOG

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *