BottomSheetDialog background blinking

前端 未结 3 679
日久生厌
日久生厌 2021-02-01 05:34

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

MainActivity.java

public class MainActi         


        
相关标签:
3条回答
  • 2021-02-01 05:42

    According to documentation the setPeekHeight method is responsible for the pop up behavior. Using the

    bottomSheet.setState(STATE_HIDDEN) should do the trick.
    
    0 讨论(0)
  • 2021-02-01 05:48

    Use Coordinate layout instead of constraint layout, and define bottomsheet layout in xml like below

        <android.support.design.widget.CoordinatorLayout 
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
             <Button
                android:id="@+id/btn1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Hello World!"
                android:layout_gravity="center" />
    
             <android.support.v4.widget.NestedScrollView 
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:id="@+id/bottom_sheet_map"
                android:layout_width="match_parent"
                android:layout_height="150dp"
                app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
    
                   <include layout="@layout/layout_bottom_sheet" />
            </android.support.v4.widget.NestedScrollView>
        </android.support.design.widget.CoordinatorLayout>
    

    In Java Class Use like this.

        private BottomSheetBehavior mBottomSheetBehavior;
        private View bottomSheet;
        private isBottomSheetExpand = false;
        ...
        btn1.setOnClickListner(new View.OncliView.OnClickListener(){
        @Override
            public void onClick(View v) {
                if(isBottomSheetExpand){
                    openBottomSheet();
                }else{
                    closeBottomSheet();
                }
            }
        });
        ...
        public void closeBottomSheet() {
           if (mBottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
                isBottomSheetExpand = false;
            }
        }
    
        public void openBottomSheet() {
            if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
                mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                isBottomSheetExpand = true;
            }
        }
    
    0 讨论(0)
  • 2021-02-01 06:01

    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>
    
    0 讨论(0)
提交回复
热议问题