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,但它没有改变任何东西。 所以我想知道它是否必须处理高程。

先谢谢你们

马蒂厄

您可以在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