我希望能够在使用 popup.showAtLocation
显示弹出窗口时模糊或调暗背景,并在 popup.dismiss
时取消模糊/调暗背景> 被调用。
我已尝试将布局参数 FLAG_BLUR_BEHIND
和 FLAG_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/