底页不适用于 Kitkat(棒棒糖前设备)

Posted

技术标签:

【中文标题】底页不适用于 Kitkat(棒棒糖前设备)【英文标题】:Bottom Sheet not working on Kitkat(Pre-lollipop device) 【发布时间】:2016-07-04 21:26:08 【问题描述】:

您好,我可以在 android 5.0 上运行底部工作表,但不能在 kitkat 上运行。

已编辑奇怪的是,当我预览最近的应用程序并再次打开该应用程序时,它开始工作了?不知道O.o 这是我的 build.gradle

android 
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig 

        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
..

View mBottomSheet = view.findViewById(R.id.location_bottom_sheet);
BottomSheetBehavior        mBehavior = BottomSheetBehavior.from(mBottomSheet);

        mBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() 
            @Override
            public void onStateChanged(@NonNull View bottomSheet, int newState) 

            

            @Override
            public void onSlide(@NonNull View bottomSheet, float slideOffset) 

            
        );

点击我正在这样做

final Handler handler = new Handler();
        handler.postDelayed(new Runnable() 
            @Override
            public void run() 
                mBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                mBottomSheet.setVisibility(View.VISIBLE);
                handler.removeCallbacks(this);
            
        , 500);

仍然无法正常工作,任何人都知道为什么会发生这种情况。

【问题讨论】:

您使用的是底部工作表对话框还是片段?请张贴代码,您在哪里显示底页。 我正在使用来自支持设计的 BottomSheet 【参考方案1】:

从 23.0.2 开始,我在使用 KitKat 和 BottomSheet 时遇到了完全相同的问题。 在我的情况下,这是由活动 xml 中的标签顺序引起的。 我将 BottomSheet 放在地图之前,在这种情况下,BottomSheet 与 KitKat 上的地图重叠(但不在 Android 5 上)。因此,要解决问题,您应该这样做:

 <FrameLayout
        android:id="@+id/frameMain"
        android:layout_
        android:layout_>
...

 <android.support.v4.widget.NestedScrollView
        android:id="@+id/bottomSheet>
...

反之亦然。希望我足够具体:)

【讨论】:

我注意到的另一件事是使用线性布局而不是框架布局作为底页的根容器 这里我创建了更全面的示例:plnkr.co/edit/G7luSS0DHSJKMrVDoShN 事实上,我的实际布局非常大且复杂,但最终此示例中的 BottomSheet 与 Google Map 片段重叠。此行为仅在棒棒糖前的设备上重现。 你的底片工作了吗...你能帮我看看吗***.com/questions/36985403/…【参考方案2】:

这是 google 开发人员讨论的已知问题 在某些 Pre-lollipop 设备上,底页不起作用

经过一天的研发,我找到了解决方案。 试试这个

  ViewCompat.postOnAnimation(yourCoordinator, new Runnable() 
            @Override
            public void run() 
                ViewCompat.postInvalidateOnAnimation(yourCoordinator);
            
        );

在初始化视图之后放置这段代码

【讨论】:

以上是关于底页不适用于 Kitkat(棒棒糖前设备)的主要内容,如果未能解决你的问题,请参考以下文章

我的 android studio 项目在棒棒糖上运行良好,但在 kitkat 设备上测试时崩溃

Android Studio 项目适用于 Lollipop,但不适用于 Kitkat

Proguard minifyEnabled true 用于调试构建,不适用于预棒棒糖

底页不适用于谷歌地图

Android,自定义通知,总是给我白色文本

相机 API 适用于 Jelly Bean 但不适用于 Kitkat