视图显示在另一个视图下方,该视图在Android中具有较低的标高

视图显示在另一个视图下方,该视图在Android中具有较低的标高,android,view,elevation,Android,View,Elevation,我遇到了一个看似奇怪的问题,当视图包含在父视图组中时,视图显示在另一个具有较低标高的视图下方。下面是我能做的最简单示例的代码片段。视图(正方形)具有完全相同的高程 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ap

我遇到了一个看似奇怪的问题,当视图包含在父视图组中时,视图显示在另一个具有较低标高的视图下方。下面是我能做的最简单示例的代码片段。视图(正方形)具有完全相同的高程

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">


    <!-- Elevation working properly -->
    <View
        android:id="@+id/dark_overlay_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:alpha="0.3"
        android:background="@android:color/black"
        android:elevation="7dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <!-- Elevation working properly -->
    <View
        android:id="@+id/view_displayed_above_overlay"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#C8F8C8"
        android:elevation="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <!-- Here's the trouble -->
    <android.support.constraint.ConstraintLayout
        android:id="@+id/troublesome_parent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:id="@+id/view_that_wont_display_above_overlay"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="#C8F8C8"
            android:elevation="8dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    </android.support.constraint.ConstraintLayout>

</android.support.constraint.ConstraintLayout>

我已尝试更改显示的视图的根视图和父视图的布局类型,这无关紧要

我知道标高是从视图的直接父视图继承的,但是如果一个视图的标高较高,它不应该显示在另一个视图的上方吗

我还比较了Android Studio中布局检查器中的两个方块。唯一的区别是x位置(和ID)

为了简化,我的目标是:

  • 没有立面的视图组
  • 具有8dp高程的该视图组的子视图
  • 视图(视图组的同级视图),在子视图下方显示7dp高程

您只需将指定的标高切换到根布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white">


    <!-- Elevation working properly -->
    <View
        android:id="@+id/dark_overlay_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:alpha="0.3"
        android:background="@android:color/black"
        android:elevation="7dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <!-- Elevation working properly -->
    <View
        android:id="@+id/view_displayed_above_overlay"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#C8F8C8"
        android:elevation="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>


    <!-- Here's the trouble -->
    <android.support.constraint.ConstraintLayout
        android:id="@+id/troublesome_parent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/white"
        android:elevation="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <View
            android:id="@+id/view_that_wont_display_above_overlay"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="#C8F8C8"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    </android.support.constraint.ConstraintLayout>

</android.support.constraint.ConstraintLayout>


这是一个很老的问题,但我遇到了这个问题。设置
android:translationZ
等于
android:elevation
值对我有效

在我正在制作的应用程序中,根布局(id‘Troublemy_parent’)是一个滚动视图,它将包含其他没有标高的元素。这个建议不起作用。除非你有一个解决方案,当父视图的标高为8dp时,将子视图的标高设置为0,否则请尝试将覆盖视图移动到滚动视图中。我不这样做。。你可能复制了jantursky的答案,代码生成了你的图像。我的错。我现在不明白的是,当分配给这两个方块的十六进制值相同时,这两个方块的颜色是如何不同的。它们有不同的颜色,因为其中一个(右一个)显示在覆盖整个屏幕的黑色视图下方,alpha=0.3。两个方块都应该看起来像左边的方块,因为它们都具有比屏幕覆盖视图更高的高程。但由于某些原因,当右方形位于视图组内时,它将显示在下方。