`

Android PopupWindow介绍及实现菜单效果

 
阅读更多

本文主要介绍PopupWindow的基本知识利用PopupWindow实现类似网页上或者windows开始按钮的菜单效果以及如何解决PopupWindow和listView或GridView同时使用时焦点及页面响应问题

 

因为PopupWindow能实现非模态对话框效果,所以建议大家使用,而不是用AlertDialog等模态对话框阻止用户的操作.

 

1、PopupWindow介绍

PopupWindow可以用来装载一些信息或是View,它可以悬浮在当前活动窗口上,并且不干扰用户对背后窗口的操作。

1.1 PopupWindow创建方式,主要为

a. 显示contentView 

PopupWindow(View contentView)

 

b. 显示contentView,固定的高度和宽度

PopupWindow(View contentView, int width, int height)

更多见PopupWindow

 

1.2 PopupWindow显示方式,三种分别为

a. 在anchor的左下角显示PopupWindow,偏移位置为xoff和yoff,即相当于以anchor的左下角定点为二维坐标系的原点,向右为正x,向下为正y

void showAsDropDown(View anchor, int xoff, int yoff)

 

b. 在anchor的左下角显示PopupWindow,偏移位置为0

void showAsDropDown(View anchor)

 

c. 在固定位置显示,parent为父view,gravity为显示的格式(如剧中),x和y为坐标点

void showAtLocation(View parent, int gravity, int x, int y)

 

1.3 其他可能用到的

焦点,设置PopupWindow是否可以获得焦点。

输入法模式setInputMethodMode。有三种为允许输入法、不允许输入法、根据是否可以有焦点决定。

 

2、利用PopupWindow实现菜单效果

2.1 利用listView显示

// list的数据源
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map1 = new HashMap<String, String>();
map1.put("menuName", "菜单1");
HashMap<String, String> map2 = new HashMap<String, String>();
map2.put("menuName", "菜单2");
HashMap<String, String> map3 = new HashMap<String, String>();
map3.put("menuName", "菜单3");
list.add(map1);
list.add(map2);
list.add(map3);
SimpleAdapter listAdapter = new SimpleAdapter(AccountManageActivity.this, list,
											  R.layout.account_manage_long_click_row,
											  new String[] {PopupWindowMenu.FIRST_COLUMN},
											  new int[] {R.id.accountLongClickTextView});

View view = getLayoutInflater().inflate(R.layout.account_manage_list, null);
ListView listView = (ListView)view.findViewById(R.id.listView);
listView.setAdapter(listAdapter);

// PopupWindow定义,显示view,以及初始化长和宽
PopupWindow menu = new PopupWindow(view, 200, 60);
// 必须设置,否则获得焦点后页面上其他地方点击无响应
menu.setBackgroundDrawable(new BitmapDrawable());
// 设置焦点,必须设置,否则listView无法响应
menu.setFocusable(true);
// 设置点击其他地方 popupWindow消失  
menu.setOutsideTouchable(true);
// 显示在某个位置
menu.showAsDropDown(anchor);

 其中R.layout.account_manage_list文件为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <ListView 
   	android:id="@+id/listView"
   	android:layout_width="match_parent"
   	android:layout_height="wrap_content">
   	</ListView>
</LinearLayout>

其中R.layout.account_manage_long_click_row文件为

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  	xmlns:android="http://schemas.android.com/apk/res/android"
  	android:layout_width="match_parent"
  	android:layout_height="match_parent"
  	android:gravity="center_vertical|left">
	<TextView
		android:id="@+id/accountLongClickTextView"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:gravity="left|center_vertical"
		android:layout_marginLeft="4dp"
		style="@style/DefaultFontStyle">
		</TextView>
</LinearLayout> 

注意必须设置PopupWindow的setFocusable(true),否则listView无法响应

同时需要设置setBackgroundDrawable(new BitmapDrawable());否则setFocusable(true)后,点击页面其他地方便无法响应。

 

除了setBackgroundDrawable(new BitmapDrawable());还可以使用下面两种解决页面无法响应问题

a、处理响应
有点麻烦,有兴趣可以自己看看http://zhoudan241.iteye.com/blog/1147730
 

b、最笨的方法将listView中元素拿出来放到LinearLayout中,对于非listView都无需设置setFocusable(true),从而解决问题,具体可以见http://blog.csdn.net/ihrthk/article/details/7338791

但这种方法对于动态变化的菜单需要配置多份layout文件

 

2.2 利用GridView实现方格菜单

对于很多应用像uc浏览器的菜单都有更多的选项和分级,实现道理同上面的listView,可以参考http://blog.csdn.net/kkfdsa132/article/details/6403404

同样可能碰到上面的响应问题

 

参考:

http://developer.android.com/reference/android/widget/PopupWindow.html

 

关于PopupWindow菜单更炫的效果可参考

http://blog.csdn.net/wanli_smile/article/details/6907433

 

更多对话框使用可参考

http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html

 

 

分享到:
评论

相关推荐

    Android PopupWindow实现右侧、左侧和底部弹出菜单

    本教程将详细介绍如何利用PopupWindow实现右侧、左侧和底部弹出菜单,以提供丰富的交互体验。 首先,我们来理解一下PopupWindow的基本概念。PopupWindow是Android中的一个类,它允许开发者创建浮动的窗口,可以显示...

    Android PopupWindow实现弹出菜单.zip

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮动的窗口效果,常用于实现各种弹出式菜单、提示信息等。本资料"Android PopupWindow实现弹出菜单.zip"应该包含了如何利用PopupWindow在Android...

    Android PopupWindow实现屏幕底部菜单.rar

    Android PopupWindow实现屏幕底部菜单,效果中包括了圆形的悬浮按钮,这一个圆角按钮实现方法有很多,本例中是使用ImageView来实现。另外效果还包括了弹出的菜单,之前思路有两种,第一种,写布局实现,第二种,弹出...

    Android用PopupWindow实现弹出listview形式菜单

    在Android开发中,有时我们需要创建一个可自定义的弹出菜单,这通常通过使用`PopupWindow`类来实现。`PopupWindow`是Android系统提供的一个轻量级窗口,它可以显示在屏幕上的任意位置,用于创建浮动、弹出式的UI组件...

    Android之用PopupWindow实现弹出菜单

    在使用UC-WebBrowser时,你会发现它...其实,它的本身是PopupWindow或者是AlertDialog对话框,在里面添加两个GridView控件,一个是菜单标题栏,一个是菜单选项。菜单选项视图的切换可以通过适配器的变换,轻松地实现。

    android popupwindow 底部灰色背景

    在实现特定的UI设计时,比如底部弹出菜单或对话框,我们可能会遇到需要添加底部灰色背景的需求。这个场景描述的“android popupwindow 底部灰色背景”就是这样一个例子。 首先,理解PopupWindow的基本概念。...

    android自定义popupwindow仿微信右上角弹出菜单效果

    本文将详细介绍如何使用`PopupWindow`在Android应用中模仿微信右上角的弹出菜单效果。 首先,我们需要理解`PopupWindow`的基本用法。`PopupWindow` 是一个可以在屏幕任意位置显示的窗口,它不依附于任何Activity,...

    安卓Android源码——Android之用PopupWindow实现弹出菜单.zip

    在安卓开发中,`PopupWindow` 是一个非常实用的组件,它允许开发者在屏幕上创建一个浮动、临时的视图,可以用来实现各种交互效果,如弹出菜单、提示信息等。这个压缩包“安卓Android源码——Android之用PopupWindow...

    Android源码——PopupWindow实现弹出菜单.zip

    在Android开发中,`PopupWindow` 是一个非常重要的组件,常用于实现各种弹出式菜单、下拉选择器等交互效果。本资料包"Android源码——PopupWindow实现弹出菜单.zip"主要聚焦于如何利用`PopupWindow`来创建自定义的弹...

    Android-炫酷的底部弹窗(popupwindow)布局缩放效果

    在Android应用开发中,PopupWindow是一个非常常用的组件,它能够以弹出窗口的形式展示内容,通常用于实现下拉菜单、浮动提示等效果。本篇我们将深入探讨如何创建一个具有底部弹出并带有炫酷布局缩放效果的...

    android PopupWindow的使用(带动画效果)源码

    在Android开发中,`PopupWindow`是一个非常实用的组件,常用于实现各种弹出窗口的效果,比如下拉菜单、提示信息等。`PopupWindow`提供了丰富的自定义能力,包括动画效果,使得应用的交互体验更加生动有趣。本教程将...

    android利用PopupWindow实现点击工具栏弹出下拉菜单

    android页面开发中会碰到这种需求:点击页面顶部工具栏某个按钮时需要弹出下拉菜单。该工程利用PopupWindow实现了点击工具栏弹出下拉菜单的功能的主要实现类 .

    android ICS式下拉菜单实现详解 PopupWindow

    ### Android ICS式下拉菜单实现详解:PopupWindow 在Android开发中,为了提供更丰富的交互体验和增强应用的功能性,开发者经常会遇到需要实现类似ICS(Ice Cream Sandwich)风格的下拉菜单的需求。这种菜单样式在...

    Android PopupWindow重写系统菜单

    这样,当用户点击传统菜单键或者在API 26及以上版本的设备上执行右滑手势时,就会显示你自定义的PopupWindow菜单。 此外,为了确保应用的兼容性和性能,还需要注意以下几点: 1. **焦点管理**:PopupWindow会抢占...

    Android从屏幕底部弹出PopupWindow

    在Android开发中,PopupWindow是一种常用的UI组件,它可以在屏幕上的任意位置显示一个浮动窗口,通常用于实现类似下拉菜单、提示框等效果。在这个场景中,我们要实现的是从屏幕底部弹出的PopupWindow,并带有滑动...

    Android PopupWindow泡泡效果(有listview)

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮现在当前视图之上的窗口效果,常用于实现下拉菜单、提示框等。本篇将详细讲解如何利用PopupWindow实现一个具有泡泡效果,并且包含ListView的...

    安卓popupwindow相关-Android用PopupWindow实现的Popup菜单.rar

    在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮现在当前视图之上的小型窗口,常用于实现各种弹出式菜单、提示信息等。本资源"安卓popupwindow相关-Android用PopupWindow实现的Popup菜单.rar...

    Android之用PopupWindow实现弹出listview形式的菜单

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来实现各种形式的弹出窗口,如下拉菜单、提示框等。本教程将详细讲解如何使用`PopupWindow`来创建一个以`ListView`形式展示的菜单。首先,我们需要...

    android使用popupwindow自定义menu菜单

    本篇将详细介绍如何在Android中利用`PopupWindow`来实现自定义的menu菜单。 首先,我们需要了解`PopupWindow`的基本用法。`PopupWindow`类提供了创建和管理浮动窗口的功能。它可以在任意视图上方显示,可以设置大小...

    Android代码-之用PopupWindow实现弹出菜单.zip

    在Android开发中,PopupWindow是一种常用的UI组件,用于在界面上创建临时的、浮动的视图,常用于实现各种弹出式菜单、下拉选择器等。本资料包"Android代码-之用PopupWindow实现弹出菜单.zip"显然是为了演示如何在...

Global site tag (gtag.js) - Google Analytics