PopupWindow弹出菜单

实现将一个View显示在某一位置,而且是浮于当前窗口

首先要有一个要显示的view的布局,可以是任意View,包括ViewGroup

 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="fill_parent"
 5     android:background="#d3d3d3"
 6     android:gravity="center_horizontal"
 7     android:orientation="vertical" >
 8
 9
10     <TextView
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:gravity="center"
14         android:id="@+id/textView"
15         android:text="文本内容"
16         />
17 </LinearLayout>

然后主界面布局文件

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context=".MainActivity" >
 6
 7     <LinearLayout
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         android:orientation="horizontal"
11         >
12         <!-- 区域 -->
13         <Button
14             android:layout_width="0dp"
15             android:layout_weight="1"
16             android:gravity="center"
17             android:background="#0000"
18             android:layout_height="wrap_content"
19             android:text="区域"
20             android:drawableRight="@drawable/title_bar_arrow_nor"
21             android:id="@+id/btn_1"
22             />
23         <!-- 类别 -->
24         <Button
25             android:background="#0000"
26             android:layout_width="0dp"
27             android:layout_weight="1"
28             android:layout_height="wrap_content"
29             android:text="类别"
30             android:drawableRight="@drawable/title_bar_arrow_nor"
31             android:id="@+id/btn_2"
32             />
33
34         <!-- 价格 -->
35         <Button
36             android:background="#0000"
37             android:layout_width="0dp"
38             android:layout_weight="1"
39             android:layout_height="wrap_content"
40             android:text="价格"
41             android:drawableRight="@drawable/title_bar_arrow_nor"
42             android:id="@+id/btn_3"
43             />
44
45         <!-- 更多 -->
46         <Button
47             android:background="#0000"
48             android:layout_width="0dp"
49             android:layout_weight="1"
50             android:layout_height="wrap_content"
51             android:text="更多"
52             android:drawableRight="@drawable/title_bar_arrow_nor"
53             android:id="@+id/btn_4"
54             />
55
56     </LinearLayout>
57
58 </RelativeLayout>

主activity

  1 package com.example.aaa;
  2
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.view.View;
  6 import android.view.View.OnClickListener;
  7 import android.view.ViewGroup;
  8 import android.widget.Button;
  9 import android.widget.PopupWindow;
 10 import android.widget.TextView;
 11
 12 public class MainActivity extends Activity implements OnClickListener {
 13
 14     private PopupWindow pop;
 15
 16     private Button btn1;
 17     private Button btn2;
 18     private Button btn3;
 19     private Button btn4;
 20
 21     private TextView text;
 22
 23     View view;
 24     @Override
 25     protected void onCreate(Bundle savedInstanceState) {
 26         super.onCreate(savedInstanceState);
 27         setContentView(R.layout.activity_main);
 28
 29         initView();
 30         initPopWindow();
 31
 32     }
 33
 34     private void initView() {
 35         // TODO Auto-generated method stub
 36         btn1 = (Button) findViewById(R.id.btn_1);
 37         btn2 = (Button) findViewById(R.id.btn_2);
 38         btn3 = (Button) findViewById(R.id.btn_3);
 39         btn4 = (Button) findViewById(R.id.btn_4);
 40         btn1.setOnClickListener(this);
 41         btn2.setOnClickListener(this);
 42         btn3.setOnClickListener(this);
 43         btn4.setOnClickListener(this);
 44     }
 45
 46
 47     private void initPopWindow() {
 48         // TODO Auto-generated method stub
 49         //根据layout创建弹出界面
 50         view = this.getLayoutInflater().inflate(R.layout.popup_window, null);
 51         pop = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT,
 52                 ViewGroup.LayoutParams.WRAP_CONTENT);
 53         text = (TextView) view.findViewById(R.id.textView);
 54
 55         pop.setOutsideTouchable(true);
 56         view.setOnClickListener(new View.OnClickListener() {
 57             @Override
 58             public void onClick(View v) {
 59                 // TODO Auto-generated method stub
 60                 pop.dismiss();
 61             }
 62         });
 63
 64     }
 65
 66     @Override
 67     public void onClick(View v) {
 68         // TODO Auto-generated method stub
 69         switch (v.getId()) {
 70         case R.id.btn_1:
 71             text.setText("区域");
 72             if(pop.isShowing())
 73                 pop.dismiss();
 74             else
 75                 pop.showAsDropDown(v);
 76             break;
 77         case R.id.btn_2:
 78             text.setText("类别");
 79             if(pop.isShowing())
 80                 pop.dismiss();
 81             else
 82             pop.showAsDropDown(v);
 83             break;
 84         case R.id.btn_3:
 85             text.setText("价格");
 86             if(pop.isShowing())
 87                 pop.dismiss();
 88             else
 89             pop.showAsDropDown(v);
 90             break;
 91         case R.id.btn_4:
 92             text.setText("更多");
 93             if(pop.isShowing())
 94                 pop.dismiss();
 95             else
 96             pop.showAsDropDown(v);
 97             break;
 98
 99         default:
100             break;
101         }
102     }
103
104 }

出现位置的几个方法

showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移

效果图:

时间: 2024-08-04 01:34:01

PopupWindow弹出菜单的相关文章

【转】android创建Popwindow弹出菜单的两种方式

方法一的Activity [java] view plaincopy package com.app.test02; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import

用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)

     用PopupWindow实现弹出菜单是一个比较好的方式.当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐. 这个实例的效果是这样的:点击按钮后,一个菜单从屏幕的右边滑入到屏幕中,点击按钮/空白处后菜单消失. 布局文件时一个按钮,我就不贴出代码了.下面是菜单的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&

android开发步步为营之64:PopupWindow实现自定义弹出菜单

打开PopupWindow的源码,你会发现它其实也是通过WindowManager来添加view的. private void invokePopup(WindowManager.LayoutParams p) { if (mContext != null) { p.packageName = mContext.getPackageName(); } mPopupView.setFitsSystemWindows(mLayoutInsetDecor); setLayoutDirectionFro

Android开发技巧——使用PopupWindow实现弹出菜单

在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在本文当中,我将与大家分享如何使用PopupWindow实现弹出菜单. 1.弹出菜单的封装PopMenu PopupWindow可以说是一个浮动在Activity之上的容器,通常用来显示自定义的视图.比如像自动完成输入框AutoCompleteTextView,它的提示列表就是使用PopupWindo

仿微信右上角弹出菜单

使用PopupWindow实现仿微信右上角弹出菜单. 效果图如下: popupWindow代码如下: import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.stcyclub.e_community.R; import android.app.Activity; import android.content.Context; impo

Android弹出菜单

在实际开发中,我们可能会用到toolbar控件,然后还要在右上角添加弹出菜单,但是toolbar弹出菜单,实在是不好控制位置,因此用户体验很是不好,所以 就想到了用popupwindow来代替弹出的菜单.话不多说先看效果(文章末尾有demo下载地址): 效果还是基本能接受的. 下面讲讲实现过程: 一:菜单布局,很简单,和一般的布局一样,linearlayout中包裹textview和imageview(需要图片的话) <?xml version="1.0" encoding=&q

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

    这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过PopupWindows实现弹出菜单,点击不同按钮能实现不同方法,相当于美图秀秀编辑图片的功能吧!它并没有涉及到Fragment碎片切换页面的功能,因为页面始终显示被处理的图片.这是我初学Android的一篇基础性文章和在线思想笔记,网上有很多更优秀的demo,不过也希望对大家有用~ 首先介绍两种方法实现底部菜单点击不同图标显示选中状态的效果. (可参考简短文章:An

底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

http://blog.csdn.net/eastmount/article/details/40827939?utm_source=tuicool 这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过PopupWindows实现弹出菜单,点击不同按钮能实现不同方法,相当于美图秀秀编辑图片的功能吧!它并没有涉及到Fragment碎片切换页面的功能,因为页面始终显示被处理的图片.这是我初学Android的一篇基础性文章和在线思想

Android 长按Listview 每个item底部弹出菜单

android界面中,有一个功能是点击listview的每个item,下方弹出两个菜单,可以点击进入别的界面,这个功能可以使用开源项目expandablelistview,的确是可以实现,但发现导入的代码过多,显得很臃肿,经过师傅指点,我采用的是如下方法,步骤如下: 1.新建一个listview,需要在外层套一层scrollview,不过使用scrollview会导致listview的高度只有一个item,需要使用自定义的listview,代码如下: package allone.verbank