所以我有一个自定义的“对话框”,它实际上只是一个在framelayout中的片段。 无论如何,我希望它一旦显示就模糊并调暗其背后的任何东西。 我目前在onCreateView
中使用它 // Dim and blur background
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
然而,这并没有使包含RecyclerView和CardView的其他framelayout模糊或变暗,这些元素仍然以完全不透明的方式显示,不确定为什么?
这是一个screeshot,你可以看到背景变得模糊,但不是片段背后的所有视图都变暗了
我希望能够实现NavigationDrawer打开时的外观,这是同一应用程序中的一个示例,所有内容都正在变暗和模糊。
这是我的XML文件,有帮助,
<android.support.design.widget.CoordinatorLayout 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"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".controllers.MainActivity"
android:id="@+id/app_bar_main_layout">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
// This is the framelayout for a fragment
// The fragment contains a RecyclerView and a CardView
// This is what I would like to be dimmed.
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_layout_container"
android:background="@color/colorCardDisplayBackground"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</FrameLayout>
// This is my custom "Dialog" fragment
<FrameLayout
android:elevation="6dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/card_fragment_container">
<ImageButton
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:layout_gravity="bottom|end"
android:layout_marginRight="15dp"
android:background="@drawable/round_button_background"
android:elevation="8dp"
android:src="@drawable/ic_done_white_24dp"
android:scaleType="center"
android:visibility="gone"
android:id="@+id/final_confirm_card_button"/>
</FrameLayout>
<com.getbase.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:id="@+id/mainFab"
android:layout_height="wrap_content"
fab:fab_icon="@drawable/ic_add_white_48dp"
fab:fab_colorNormal="@color/colorAccent"
fab:fab_colorPressed="@color/colorAccentLight"
android:layout_gravity="bottom|end" />
答案 0 :(得分:3)
如评论中所述,FLAG_BLUR_BEHIND
无法使用我正在使用的框架布局。
我决定只改变父
的前景// Dim the background
// Where mainFrameLayout is as FrameLayout
mainFrameLayout.getForeground().setAlpha(220);
当你想要删除&#34; dim&#34;效果
// Remove dim background color
mainFrameLayout.getForeground().setAlpha(0);
答案 1 :(得分:1)
自API 14以来,FLAG_BLUR_BEHIND
标志已被弃用,因此您不应期望它能够正常工作。
不幸的是,Android在弃用此标志时没有提供内置替代方案。但是,已经开发了几种替代解决方案。我建议你看看here所描述的500px模糊库。
此观点背后的想法是,您致电.setBlurredView(View view)
,view
是BlurringView
下方要模糊的视图。然后,每当要重绘模糊时调用.invalidate()
,因为模糊视图已更改。请注意,此模糊效果会使用RenderScript
ScriptIntrinsicBlur
效果。