查看代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp">
<Button
android:id="@+id/wi_fi_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#feeca0"
android:text="some text"
android:textColor="#b5a24f" />
<ProgressBar
android:id="@+id/wifi_progressBar"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_centerInParent="true" />
</RelativeLayout>
此类元素放置,在将UI主题更新到AppCompat之前工作。更新后,所有按钮在所有情况下都会重叠元素,即使它们必须是高位(根据xml代码)
这是我的ActivityThem风格
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:textAppearanceButton">@style/AppTheme.ButtonsTextAppearance</item>
<item name="switchStyle">@style/SwitcherStyle</item>
</style>
正如您所看到的,只有textAppearance覆盖。 Button(Base.Widget.AppCompat.Button)的父组件没有任何特殊属性(我希望在web ccs-z-index中找到类似的东西)。 我解决了这个问题:只需用框架布局包装按钮,然后我的行为返回(进度条在Buttons视图上绘制)。
那么,是否有人知道这是AppCompat中Button的错误或功能?
P.S:来自AS的截图,但设备上的行为也一样。
答案 0 :(得分:0)
您对Z索引的怀疑是正确的。 Android 5引入了阴影和高程。 Button
具有默认标高2dp
,这使其可以在其他标高较小的窗口小部件(以相同布局)上方渲染,例如ProgressBar
没有标高。
在运行Android 4及更低版本的设备上,海拔高度将被忽略。您的进度条将位于按钮上方。
最快和最肮脏的解决方法是将android:elevation="10dp"
分配给进度条。它不会绘制任何阴影,因为它没有任何背景。但是它将比处于按下状态的按钮具有更高的高度。