浅谈PopupWindow弹出菜单

时间:2022-10-01 14:45:27

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

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

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#d3d3d3"
android:gravity="center_horizontal"
android:orientation="vertical" > <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/textView"
android:text="文本内容"
/>
</LinearLayout>

然后主界面布局文件

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<!-- 区域 -->
<Button
android:layout_width="0dp"
android:layout_weight=""
android:gravity="center"
android:background="#0000"
android:layout_height="wrap_content"
android:text="区域"
android:drawableRight="@drawable/title_bar_arrow_nor"
android:id="@+id/btn_1"
/>
<!-- 类别 -->
<Button
android:background="#0000"
android:layout_width="0dp"
android:layout_weight=""
android:layout_height="wrap_content"
android:text="类别"
android:drawableRight="@drawable/title_bar_arrow_nor"
android:id="@+id/btn_2"
/> <!-- 价格 -->
<Button
android:background="#0000"
android:layout_width="0dp"
android:layout_weight=""
android:layout_height="wrap_content"
android:text="价格"
android:drawableRight="@drawable/title_bar_arrow_nor"
android:id="@+id/btn_3"
/> <!-- 更多 -->
<Button
android:background="#0000"
android:layout_width="0dp"
android:layout_weight=""
android:layout_height="wrap_content"
android:text="更多"
android:drawableRight="@drawable/title_bar_arrow_nor"
android:id="@+id/btn_4"
/> </LinearLayout> </RelativeLayout>

主activity

 package com.example.aaa;

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { private PopupWindow pop; private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4; private TextView text; View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
initPopWindow(); } private void initView() {
// TODO Auto-generated method stub
btn1 = (Button) findViewById(R.id.btn_1);
btn2 = (Button) findViewById(R.id.btn_2);
btn3 = (Button) findViewById(R.id.btn_3);
btn4 = (Button) findViewById(R.id.btn_4);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
} private void initPopWindow() {
// TODO Auto-generated method stub
//根据layout创建弹出界面
view = this.getLayoutInflater().inflate(R.layout.popup_window, null);
pop = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
text = (TextView) view.findViewById(R.id.textView); pop.setOutsideTouchable(true);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
pop.dismiss();
}
}); } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_1:
text.setText("区域");
if(pop.isShowing())
pop.dismiss();
else
pop.showAsDropDown(v);
break;
case R.id.btn_2:
text.setText("类别");
if(pop.isShowing())
pop.dismiss();
else
pop.showAsDropDown(v);
break;
case R.id.btn_3:
text.setText("价格");
if(pop.isShowing())
pop.dismiss();
else
pop.showAsDropDown(v);
break;
case R.id.btn_4:
text.setText("更多");
if(pop.isShowing())
pop.dismiss();
else
pop.showAsDropDown(v);
break; default:
break;
}
} }

出现位置的几个方法

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

效果图:

浅谈PopupWindow弹出菜单

浅谈PopupWindow弹出菜单的更多相关文章

  1. 【Android】创建Popwindow弹出菜单的两种方式

    方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...

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

    方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...

  3. Android 使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

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

    如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 如何利用PopupWindow实现弹出菜单并解决焦点获取以及与软键盘冲突问题 在android中有时候可能要实现一个底部弹 ...

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

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

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

         用PopupWindow实现弹出菜单是一个比较好的方式.当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐. 这个实例的效果是这样的:点击按钮后,一个菜 ...

  7. PopupWindow&lpar;2&rpar;简单示例-自定义弹出菜单

    本示例,用 popupWindow 自定义弹出菜单 public class CustomActionProvider extends ActionProvider implements OnMenu ...

  8. 【转】 教你如何创建类似QQ的android弹出菜单

    原文地址:http://www.apkbus.com/android-18034-1-1.html 大家可能看到android的自带的系统菜单比较难看,如图: 2011-12-4 23:13 上传 下 ...

  9. dragView 屏幕拖拽并且弹出菜单的控件

    dragView 因项目新需求需要添加一个屏幕拖拽按钮可以弹出菜单的控件,因为不是我做的闲来无事写一个demo吧 可能存在一些小bug(毕竟就写了几个小时)兄弟姐妹们理解思路就行 具体的可以自己调试一 ...

随机推荐

  1. 应用Css美化表单

    原来的效果  美化之后的效果  实现代码 <style> .container { margin:0auto; width:620px; } fieldset { padding:18px ...

  2. vs2010 安装MVC 3&period;0

    下载链接如下: MVC 3安装包:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=d2928bc1-f48c-4e95-a ...

  3. Textarea设置自动高度

    $.fn.extend({ autoHeight: function() { return this.each(function() { var $this = jQuery(this); if(!$ ...

  4. Testing - 自动化测试的几个基础概念

    自动化测试框架与模型 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块. 自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试 ...

  5. Beta冲刺1&period;0

    1. 提供当天站立式会议照片一张 2. 每个人的工作 (有work item 的ID) 3. 发布项目燃尽图 4. 每人的代码/文档签入记录 (1)代码签入记录 (2)代码签入链接   链接1   链 ...

  6. css样式表2

    <head> <style type="text/css"> .main { height:42px; width:100%; text-align:cen ...

  7. 【树莓派】RPi desktop系统重启或关机挂起几个问题:plymouth-reboot&period;service、plymouth-poweroff&period;service、Deconfiguring network interfaces

    在基于intel平台安装的RPi desktop关机或者重启时,会存在挂起的问题,一直卡着不动. 挂起问题有3个: 系统关机时候,停留在:plymouth-poweroff.service 系统重启时 ...

  8. 排序算法之快速排序(Quicksort)解析

    一.快速排序算法的优点,为什么称之为快排? Quicksort是对归并排序算法的优化,继承了归并排序的优点,同样应用了分治思想. 所谓的分治思想就是对一个问题“分而治之”,用分治思想来解决问题需要两个 ...

  9. 转载:eclipse 搭建SSH项目(第二篇,有具体的项目例子)

    原文地址:http://blog.csdn.net/yeohcooller/article/details/9316923 读博文前应该注意: 本文提纲:本文通过一个用户注册的实例讲解SSH的整合.创 ...

  10. MySQL监控、性能分析——工具篇

    https://blog.csdn.net/leamonjxl/article/details/6431444 MySQL越来越被更多企业接受,随着企业发展,MySQL存储数据日益膨胀,MySQL的性 ...