android - Android PopupWindow Activity 时背景模糊或变暗

标签 android popupwindow android-popupwindow

我希望能够在使用 popup.showAtLocation 显示弹出窗口时模糊或调暗背景,并在 popup.dismiss 时取消模糊/调暗背景> 被调用。

我已尝试将布局参数 FLAG_BLUR_BEHINDFLAG_DIM_BEHIND 应用于我的 Activity ,但这似乎只是在我的应用启动后使背景模糊和变暗。

如何仅使用弹出窗口进行模糊/调暗?

最佳答案

问题是关于 Popupwindow类,但每个人都给出了使用 Dialog 的答案类(class)。如果您需要使用 Popupwindow,那几乎没用类,因为 Popupwindow没有 getWindow()方法。

我找到了一个真正适用于 Popupwindow 的解决方案.它只要求您用于后台 Activity 的 xml 文件的根是 FrameLayout .你可以给Framelayout元素android:foreground标签。这个标签的作用是指定一个可绘制资源,该资源将分层在整个 Activity 之上(也就是说,如果 Framelayout 是 xml 文件中的根元素)。然后,您可以控制前景可绘制对象的不透明度 (setAlpha())。

你可以使用任何你喜欢的drawable资源,但是如果你只是想要一个变暗的效果,在drawable文件夹中创建一个xml文件,文件名是<shape>。标记为根。

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <solid android:color="#000000" />
</shape>

(有关 shape 元素的更多信息,请参见 http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape)。 请注意,我没有在颜色标签中指定使可绘制项目透明的 alpha 值(例如 #ff000000 )。原因是任何硬编码的 alpha 值似乎都会覆盖我们通过 setAlpha() 设置的任何新 alpha 值。在我们的代码中,所以我们不希望这样。 但是,这意味着可绘制项目最初是不透明的(实心的,不透明的)。所以我们需要让它在activity的onCreate()中透明化方法。

这是 Framelayout xml 元素代码:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainmenu"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:foreground="@drawable/shape_window_dim" >
...
... your activity's content
...
</FrameLayout>

这是 Activity 的 onCreate() 方法:

public void onCreate( Bundle savedInstanceState)
{
  super.onCreate( savedInstanceState);

  setContentView( R.layout.activity_mainmenu);

  //
  // Your own Activity initialization code
  //

  layout_MainMenu = (FrameLayout) findViewById( R.id.mainmenu);
  layout_MainMenu.getForeground().setAlpha( 0);
}

最后,使 Activity 变暗的代码:

layout_MainMenu.getForeground().setAlpha( 220); // dim

layout_MainMenu.getForeground().setAlpha( 0); // restore

alpha 值来自 0 (不透明)至 255 (无形的)。 当您关闭 Popupwindow 时,您应该取消 Activity 的暗淡。

我没有包含显示和关闭 Popupwindow 的代码,但这里有一个链接,说明如何做到这一点:http://www.mobilemancer.com/2011/01/08/popup-window-in-android/

关于android - Android PopupWindow Activity 时背景模糊或变暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3221488/

相关文章:

android - activity.isFinishing 语句中的 BadTokenException : Unable to add window -- token null is not valid; is your activity running?

java - 项目选择上带有微调器的弹出窗口不起作用

android - 文本输入布局 : RuntimeException - Failed to resolve attribute at index 24

java - 下载文件并保存到光盘不起作用

android - 经常观察电池?

android - buildPreBundle 重复条目失败 : META-INF/MANIFEST. MF

android - 如何在android中为弹出窗口制作动画

android - 谷歌地图的android xml布局问题

javascript - Sweet Alert JS库-修改动画速度

java - 使用 PopupWindow 的 showAtLocation(View, int, int, int) 时遇到问题