Android 5.0 – ProgressBar无法在Button上显示

我认为标题非常明确我的问题……所以这是我的布局:

 

在Android SDK <21上没问题,ProgressBar正确地显示在Button上并且在Button中居中。 但是在Android 5.0上,ProgressBar显示 Button 后面

因此,当您在“开发者选项”设置中激活“显示布局边界”选项时,您可以看到它已正确定位,但如果没有该选项,则无法在屏幕上看到任何内容。

有谁知道如何解决这个问题? 我想这是近期引入的一个问题,但我真的不知道如何处理它。 为了记录,我使用了support.v7中最近发布的Theme.AppCompat样式。

编辑:

我还试图以setElevation(0)方式将setElevation(0)setTranslationY(0)应用于Button,但它没有改变任何东西。 所以我想知道它是否必须处理高程。

先谢谢你们

马蒂厄

  • 仅使用微调器创建progressDialog(在中间)
  • 只用微调(中间)创build一个progressDialog,
  • Android:半圈进度条
  • 如何在android中更改默认的ProgressDialog圆圈颜色
  • 如何让ProgressBar停止旋转?
  • 循环ProgressBar背景:Android Xamarin
  • Android - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)是做什么的?
  • Android ProgessBar在加载WebView时
  • 您可以在ProgressBar中使用android:translationZ属性:

       

    在这里提出同样的问题,更好地解释了这个问题:

    https://stackoverflow.com/a/27216368/235910

    引用@CommonsWare:

    问题出现在Android 5.0的elevation属性中。 显然, RelativeLayout Z轴排序与elevation 。 如果两个窗口小部件具有相同的elevation ,则RelativeLayout将确定Z轴顺序 – 例如,如果要将布局切换为两个Button窗口小部件,则可以看到。 但是,如果一个窗口小部件( Button )具有elevation ,而另一个窗口小部件( ImageView )没有,则elevation优先。

    您可以通过android:stateListAnimator="@null"或通过定义自己的自定义animation制作工具来删除Button elevation 。 或者,您可以向ImageView添加一些elevation ,使其在Z轴上比Button更高。

    同样的问题在这里,我的简单“黑客”太过于将Button包装到另一个FrameLayout中。 这样我不关心api版本和其他高程问题;)

           

    最好将android:translationZ设置为2dp以上。 按下按钮时,您的视图/小部件将消失。 我在这里解释了原因。

      1dp  2dp 

    Button具有这两个值并在框架中定义。

    可能最简单的方法是使用FrameLayout因为它是为了制作其子视图按z-index排序的布局:

          

    我不确定你的布局是什么样的,所以也许你需要玩android:layout_gravity