转于:http://blog.csdn.net/a379992210/article/details/48423923
------------------------------------------------------------------------------------------
PopupWindow与PopupMenu的用法
@(Blog)[马克飞象|Markdown|Android]
PopupWindow
和PopupMenu
的功能都是为了弹出一个窗体,不过PopupMenu
的功能比较单一,而PopupWindow
更强。
PopupMenu
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.focus.androidnote.popupwindow.PopupWindowActivity">
<item
android:id="@+id/action_refresh"
android:title="@string/action_refresh"
android:orderInCategory="100"
app:showAsAction="never" />
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never" />
</menu>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
public class PopupWindowActivity extends BaseActivity {
private Button mPopWindowBtn;
private Button mPopMenuBtn;
private View mPopWindowView;
private PopupWindow mPopWindow;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_popup_window);
mPopWindowBtn = (Button) findViewById(R.id.pop_window_btn);
mPopMenuBtn = (Button) findViewById(R.id.pop_menu_btn);
mPopMenu = new PopupMenu(mContext, mPopMenuBtn);
mPopMenu = new PopupMenu(mContext, mPopMenuBtn);
mPopMenu.getMenuInflater().inflate(R.menu.menu_popup_window, mPopMenu.getMenu());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_popup_window, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
Toast.makeText(mContext, "Settings", Toast.LENGTH_SHORT).show();
} else if (id == R.id.action_refresh) {
Toast.makeText(mContext, "Refresh", Toast.LENGTH_SHORT).show();
}
return true;
}
public void popMenuBtnOnClick(View view) {
mPopMenu.show();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
上面的代码最主要的只有3行
mPopMenu = new PopupMenu(mContext, mPopMenuBtn);
mPopMenu.getMenuInflater().inflate(R.menu.menu_popup_window, mPopMenu.getMenu());
- 1
- 2
很简单,只需要两行代码就搞定了。
期初我以为PopupMenu
会和Activity
的Menu
共用Click事件的,但是实现onOptionsItemSelected方法后发现只有Activity
的Menu
会触发事件,mPopMenu依然要通过setOnMenuItemClickListener()才能实现点击事件的监听
PopupWindow
PopupWindow相比menu功能要强的多,可以实现布局更加复杂的效果
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="100dp"
android:layout_height="120dp"
android:background="@drawable/bg_pop_window">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:background="@android:color/transparent"
android:text="@string/action_settings"
android:textColor="@android:color/white"
android:textAllCaps="false"/>
<View
android:layout_width="wrap_content"
android:layout_height="2dp"
android:background="@color/material_blue_grey_800"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@android:color/transparent"
android:text="@string/action_refresh"
android:textColor="@android:color/white"
android:textAllCaps="false"/>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
mPopWindowView = getLayoutInflater().inflate(R.layout.pop_window_layout, null);
// Focusable 为True,PopupWindow的点击事件才会相应
mPopWindow = new PopupWindow(mPopWindowView, 150, 120, true);
// 必须在代码中设置一下背景色,点击外面不会隐藏此弹窗
mPopWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// Focusable 为False时,不执行则点击外面不会隐藏此弹窗
//mPopWindow.setOutsideTouchable(true);
// 显示 默认显示View的正下方,可以使用重载方法设置偏移量来调整位置
mPopWindow.showAsDropDown(view);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
其实用法和Menu差不多,只是背景色必须要在代码里进行设置,否则点击外面窗体不会消失,不知道这是BUG,还是Google就是这么设计的,有点想不通。
android:textAllCaps=”false” 防止Refresh显示的时候展现为全部大写
Focusable属性,发现如果设为false的window内的组件就无法收到onClick
事件
相关推荐
下面我们将深入探讨如何使用`PopupWindow`以及它与`ListView`的结合应用。 首先,`PopupWindow`是Android提供的一个可以显示任意视图的类。通过设置其大小、背景、内容等属性,我们可以自定义弹出窗口的样式和行为...
本文将深入探讨Android中的四种常见弹框:Spinner、Dialog、PopupMenu和PopupWindow,以及它们的基本使用方法。 首先,Spinner是Android系统提供的一种下拉选择框,通常用于在有限的选项中进行选择。它可以直接嵌入...
- PopupMenu是PopupWindow的一种特例,主要用于在菜单图标上弹出选项列表,使用时需调用`PopupMenu.show()`。 在实际开发中,PopupWindow的灵活性使得它在各种场景下都有广泛的应用,如下拉菜单、悬浮按钮的扩展...
在本篇文章中,我们将深入探讨PopupMenu的使用方法、常见属性以及如何自定义以满足特定需求。 ### PopupMenu的基本用法 首先,我们需要在布局文件中添加一个触发PopupMenu显示的按钮。例如: ```xml android:id...
调用`show()`方法显示PopupWindow,使用`dismiss()`方法关闭它。 7. **优化用户体验**: 为了提高用户体验,可以考虑在用户触摸屏幕其他地方时自动关闭PopupWindow。可以通过设置触摸监听器并在触摸事件中调用`...
本篇文章将深入探讨`PopupWindow`的使用方法和相关知识点。 首先,`PopupWindow`的核心特性在于它的灵活性和可定制性。通过`PopupWindow`,开发者可以自定义窗口的大小、内容、背景、动画等,以满足各种界面需求。...
3. 显示与隐藏:使用`showAtLocation()`或`showAsDropDown()`方法将PopupWindow显示在特定位置,用`dismiss()`方法关闭PopupWindow。 二、PopupWindow的属性和方法 1. `isShowing()`: 检查PopupWindow是否正在显示...
`PopupMenu`提供了丰富的定制选项,可以方便地与各种UI元素配合使用,提升用户体验。本篇文章将深入探讨如何使用`PopupWindow`来自定义系统菜单。 首先,`PopupWindow`是Android中的一个窗口类,它可以在屏幕上的...
在调用`showAsDropDown()`方法之前,可以先获取到PopupWindow的宽度和高度,然后根据这些信息计算出适合的坐标,最后使用`setGravity()`方法来设置PopupWindow的重力,使其顶部对齐于触发视图的底部。 4. **随鼠标...
此外,相关的Android相关内容还包括《Android窗口相关操作技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、...
Android开发实现popupWindow弹出窗口自定义布局与位置控制方法 Android开发实现popupWindow弹出窗口自定义布局与位置控制方法是Android开发中非常重要的一部分,掌握了这项技术可以让开发者更好地控制弹出窗口的...
4. 使用`showAsDropDown()`或`showAtLocation()`方法来显示`PopupWindow`,指定相对于哪个View的位置。 5. 添加监听器来处理用户交互,比如点击菜单项后的回调。 接着,关于`Fragment`的使用。`Fragment`是Android...
2. **PopupWindow与PopupMenu**:在Android中,PopupWindow和PopupMenu是实现弹出菜单的两种常见方式。PopupWindow允许开发者自定义更复杂的视图,而PopupMenu则更简单,适合快速创建简单的下拉菜单。在这个项目中,...
2. `PopupMenu`: 一种更方便创建弹出菜单的类,但在这里可能未被使用,因为要完全模仿微信样式,所以选择了PopupWindow。 3. `PopupWindow`: 创建和管理弹出窗口。 4. `inflate()`: 将XML布局文件转换为View对象。 5...
本示例将探讨如何在Android应用中使用`PopupMenu`和`PopupWindow`来实现这样的功能。 首先,我们来看`PopupMenu`。`PopupMenu`是Android SDK中的一个内置组件,它允许开发者在某个View旁边弹出一个菜单,这个菜单...
至于“工具”,可能指的是使用某些辅助工具或库来更方便地使用PopupWindow,比如第三方库`androidx.core.widget.PopupMenu`,它简化了创建右键菜单的操作,或者使用`Material Design`库中的`BottomSheetBehavior`来...