实现将一个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等),可以设置偏移或无偏移

效果图:

浅谈PopupWindow弹出菜单相关推荐

  1. php layer弹出层更改背景,浅谈layer弹出层按钮颜色修改方法

    layer弹出层有多种格式的弹出,使用方法也不细述. 在弹出确认框可使用confirm或open方式 在open中 layer.open({ content: '确认提交?', btn: [" ...

  2. 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题

    如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 参考文章: (1)如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 (2)https://ww ...

  3. 【转载】Android之用PopupWindow实现弹出菜单

    在使用UC-WebBrowser时,你会发现它的弹出菜单跟系统自带的菜单不一样.它实现更多菜单选项的显示和分栏.其实,它的本身是PopupWindow或者是AlertDialog对话框,在里面添加两个 ...

  4. 教你如何创建类似QQ的android弹出菜单

    热心推荐: Android  ListView两种长按弹出菜单方式 popupwindow实现弹出菜单效果 Android人才招聘--最新招聘 大家可能看到 android 的自带的系统菜单比较难看, ...

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

        这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过PopupWindows实现弹出菜单,点击不同按钮能实现不同 ...

  6. 用 JA Transmenu 模块做多级弹出菜单

    转自http://www.joomlagate.com "弹出菜单"这个说法本来不规范,尽管你我都明白这是什么意思,而实际上我们所理解的那个菜单样式英文说法是"Slide ...

  7. Android之PopupWindow弹出对话框

    Android的对话框常用的有两种:PopupWindow和AlertDialog. popupWindow是一个阻塞式的弹出框,这就意味着在我们退出这个弹出框之前,程序会一直等待,,这就意味着在我们 ...

  8. Android仿Qzone底部导航栏加号弹出菜单

    最近看到QQ空间 新浪微博-.好多应用底部导航栏都有加号点击弹出菜单,于是就写了一个demo,来给没做过这个功能的小伙伴一个参考,希望对大家有所帮助,demo中的图片均来源于Qzone 仅作为学习交流 ...

  9. 选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单

    菜单控件<Menu > 选项菜单(Option Menu) 单击Menu实体按钮弹出,android中把它叫做option menu 上下文菜单(ContextMenu 是Menu的子接口 ...

最新文章

  1. 基于 JWT + Refresh Token 的用户认证实践
  2. CSDN博客转载攻略
  3. 另一种无法enable ABAP source code tool的原因
  4. ambari 自定义组件安装
  5. java中不允许一个方法在自身定义的内部调用自己_Java面向对象三大特性(基础篇)...
  6. mfc三视图和斜等测图实现_如何在UE4中实现NPR(非真实感)渲染效果?
  7. Qt QJson遍历
  8. html调用一般处理程序方法,Web的初步篇:前台(HTML)和后台(一般处理程序)...
  9. photoshop是什么软件,它能做什么?
  10. 51单片机复习:红外通信
  11. Axure学习之简介
  12. Badboy 安装 使用 常见问题 badboy当前页面脚本发生错误
  13. java程序员 技术成长路线
  14. 总线揭密:串行传输VS并行传输
  15. 关于nofollow的问题
  16. 将数据库中的数据转换成json格式
  17. 一文读懂自动驾驶中常用的定位算法之NDT点云配准算法
  18. 解决for循环有时只输出最后一个结果
  19. Codeforces Round #375 (Div. 2) B. Text Document Analysis(字符串处理,简单题目)
  20. 小程序添加关注公众号代码功能

热门文章

  1. Mysql多表查询笔记
  2. JLabel跟label
  3. [Nodejs]初探nodejs学习笔记- 如何使用nodejs搭建简单的UDP聊天功能
  4. 2013长春区域赛总结
  5. 创新工场CE0李开复:互联网创业黄金时代来临
  6. 学习ccna,ccnp中如何提高英语问题
  7. MS SQL入门基础:数据库中的锁
  8. 小米8的MIUI12系统预置应用正在恢复
  9. java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to field
  10. 查看hive中某个表中的数据、表结构及所在路径