BottomSheetDialog背景闪烁 [英] BottomSheetDialog background blinking

查看:223
本文介绍了BottomSheetDialog背景闪烁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

解决方案

闪烁的主要原因是由于 BottomSheetDialog 的默认样式定义了默认的 windowAnimationStyle 转换为 @null .

  • backgroundDimEnabled 属性设置为 false .
  • 示例:

     <样式名称="AppTheme" parent ="Theme.AppCompat.Light.DarkActionBar">< item name ="colorPrimary"> @ color/colorPrimary</item>< item name ="colorPrimaryDark"> @ color/colorPrimaryDark</item>< item name ="colorAccent"> @ color/colorAccent</item>< item name ="bottomSheetDialogTheme"> @ style/AppTheme.BottomSheetDialog</item></style>< style name ="AppTheme.BottomSheetDialog" parent ="Theme.Design.BottomSheetDialog">< item name ="android:windowAnimationStyle"> @ null</item>< item name ="android:backgroundDimEnabled"> false</item><!-可选->< item name ="android:windowBackground">#99323232</item></style> 

    BottomSheetDialog's background is blinking when switching between apps. What am I doing wrong ?

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
            findViewById(R.id.btn1).setOnClickListener(v -> {
                BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(MainActivity.this);
                bottomSheetDialog.setContentView(R.layout.content);
                bottomSheetDialog.show();
            });
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 
    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"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context=".MainActivity">
    
        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </android.support.constraint.ConstraintLayout>
    

    content.xml

    <?xml version="1.0" encoding="utf-8"?>
    <View 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"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:background="#F00" />
    

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.holtaf.testandroidapplication">
    
        <application
            android:allowBackup="true"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    My appcompat version is 27.1.1.

    解决方案

    The main reason for the flickering is due to the default styling of the BottomSheetDialog which defines a default animation and the dim behavior.

    We can resolve the above issue by defining a custom theme using bottomSheetDialogTheme which in turn:

    1. Disables the default window animation for the BottomSheet by setting windowAnimationStyle to @null.
    2. Sets the backgroundDimEnabled attribute to false.

    Example:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    
        <item name="bottomSheetDialogTheme">@style/AppTheme.BottomSheetDialog</item>
    </style>
    
    <style name="AppTheme.BottomSheetDialog" parent="Theme.Design.BottomSheetDialog">
        <item name="android:windowAnimationStyle">@null</item>
        <item name="android:backgroundDimEnabled">false</item>
    
        <!-- optional -->
        <item name="android:windowBackground">#99323232</item> 
    </style>
    

    这篇关于BottomSheetDialog背景闪烁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆