在下面的代码中,我有一个海拔为8dp的白色视图。蓝色按钮的高度为10dp,理论上应该显示。但事实并非如此。它仅显示不直接在白色视图上的部分。我知道这与升高有关但我不确切知道是什么。我怀疑当白视图=< 2时它很好,但是一旦我将它设置得更高,就会出现问题。
这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/login_background"
android:background="@color/colorPrimary" />
<View
android:id="@+id/view"
android:layout_width="@dimen/login_container_width"
android:layout_height="@dimen/login_container_height"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/login_container_margin_top"
android:background="@drawable/login_container"
android:elevation="8dp">
</View>
<Button
android:id="@+id/button"
android:layout_width="190dp"
android:layout_height="50dp"
android:layout_marginBottom="52dp"
android:background="@drawable/login_button"
android:elevation="10dp"
android:text="LOGIN"
android:textColor="@color/white"
android:textSize="20sp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</LinearLayout>
答案 0 :(得分:1)
以下内容反映了this Stack Overflow问题和接受的答案。
让我们考虑一下你的开始。我无法访问您的所有尺寸等,以使下面的内容与您的示例完全相同,但基础就在那里。以下是基本布局。您可以看到该按钮位于视图下方,即使该视图的高程为8dp
且该按钮的高程为10dp
。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark">
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="175dp"
android:layout_alignBottom="@+id/button"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_margin="30dp"
android:background="@android:color/white"
android:elevation="8dp">
</View>
<Button
android:id="@+id/button"
android:layout_width="190dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="52dp"
android:background="@mipmap/ic_launcher"
android:elevation="10dp"
android:text="LOGIN"
android:textColor="@color/white"
android:textSize="20sp" />
</RelativeLayout>
</LinearLayout>
那么,为什么呢?这是因为按钮的XML中的android:elevation="10dp"
并未真正定义高程。相反,按钮的高程由控制android:elevation和android:translationZ属性的"StateListAnimator"控制。“(参见上面提到的问题的接受答案。)
如果您并不真正关心StateListAnimator正在为您的布局做些什么,您可以通过将android:stateListAnimator="@null"
添加到按钮的XML来简单地消除它。这是添加此代码后布局的样子。 (请注意,设计人员可能不会立即显示更改; Android Studio 3.0 Beta 6没有)。因此,您可能需要刷新布局才能看到更改。
如您所见,按钮现在正如我们所期望的那样位于视图上方。
如果您确实关心StateListAnimator
为您做了什么,您将需要定义自己的名称,并在上面更改的XML语句中输入其名称而不是@null
。我上面提到的答案包含Android可能使用的StateListAnimator
,因此您可以将其作为基础并将高程更改为您喜欢的。我没试过,但它应该有用。