最終實現效果:
項目目錄結構:
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