PopupWindow仿菜单

  程序功能:使用PopupWindow模仿window中菜单的功能,下面开始详细讲解。

 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:background="#FFFFFF" >
 6 
 7     <Button
 8         android:id="@+id/popupBtn"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_alignParentBottom="true"
12         android:layout_alignParentLeft="true"
13         android:background="#000000"
14         android:text="菜单" />
15 
16 </RelativeLayout>

     Activity的布局文件很简单,就是一个Button。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="wrap_content"
 5     android:background="#000000"
 6     android:orientation="vertical" >
 7 
 8     <ListView
 9         android:id="@+id/listView"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content" >
12     </ListView>
13 
14 </LinearLayout>

     PopupWindow的布局文件也很简单,包含一个ListView。

 1     private void init() {
 2         // 获得PopupWindow中布局引用
 3         View view = getLayoutInflater().inflate(R.layout.popupwindow, null);
 4         listView = (ListView) view.findViewById(R.id.listView);
 5         // 初始化 PopupWindow
 6         pw = new PopupWindow(view, 280, 360, true);
 7         btn = (Button) findViewById(R.id.popupBtn);
 8         // 设置Adapter
 9         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
10                 android.R.layout.simple_list_item_1, data);
11         listView.setAdapter(adapter);
12     }

     此函数用来初始化控件,其中构造PopupWindow传入了四个参数,第一个是布局文件的View,第二个是宽度,第三个是高度,第四个是此弹出框是否可以获得焦点,如果是false的话,其中包含的控件都不会获得焦点,即用户点击不会有任何反应,true则反之。

 1     private void setListener() {
 2         listView.setOnItemClickListener(new OnItemClickListener() {
 3 
 4             @Override
 5             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
 6                     long arg3) {
 7 
 8                 switch (arg2) {
 9                 case NEW:
10                     break;
11                 case OPEN:
12                     break;
13                 case SAVE:
14                     break;
15                 case CANCEL:
16                     pw.dismiss();
17                     break;
18                 }
19             }
20         });
21 
22         btn.setOnClickListener(new OnClickListener() {
23 
24             @Override
25             public void onClick(View v) {
26                 pw.showAsDropDown(v, 5, 5);
27             }
28         });
29     }

   此函数负责给控件(Button,ListView)添加事件监听,其中pw.showAsDropDown(v, 5, 5); 是让弹出框与我们的Button相关联,并且x、y坐标上都偏移5的距离。为了简单起见,其中弹出的菜单中只给“取消”添加了行为,其他操作可以另行添加,下面给出完整代码:

完整代码
 1 public class PopupActivity extends Activity {
 2 
 3     private PopupWindow pw;
 4     private Button btn;
 5     private ListView listView;
 6     private String[] data = { "新建", "打开", "保存", "取消" };
 7 
 8     private static final int NEW = 0;
 9     private static final int OPEN = 1;
10     private static final int SAVE = 2;
11     private static final int CANCEL = 3;
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15 
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.popup);
18 
19         // 初始化控件
20         init();
21         // 控件添加监听
22         setListener();
23     }
24 
25     /**
26      * 设置监听
27      */
28     private void setListener() {
29         listView.setOnItemClickListener(new OnItemClickListener() {
30 
31             @Override
32             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
33                     long arg3) {
34 
35                 switch (arg2) {
36                 case NEW:
37                     break;
38                 case OPEN:
39                     break;
40                 case SAVE:
41                     break;
42                 case CANCEL:
43                     pw.dismiss();
44                     break;
45                 }
46             }
47         });
48 
49         btn.setOnClickListener(new OnClickListener() {
50 
51             @Override
52             public void onClick(View v) {
53                 pw.showAsDropDown(v, 5, 5);
54             }
55         });
56     }
57 
58     /**
59      * 初始化
60      */
61     private void init() {
62         // 获得PopupWindow中布局引用
63         View view = getLayoutInflater().inflate(R.layout.popupwindow, null);
64         listView = (ListView) view.findViewById(R.id.listView);
65         // 初始化 PopupWindow
66         pw = new PopupWindow(view, 280, 360, true);
67         btn = (Button) findViewById(R.id.popupBtn);
68         // 设置Adapter
69         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
70                 android.R.layout.simple_list_item_1, data);
71         listView.setAdapter(adapter);
72     }
73 }

效果图如下:

                                  

 

posted on 2012-10-12 11:15  liutianyi  阅读(1081)  评论(0编辑  收藏  举报