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

时间:2018-05-22 18:22:29

标签: android view elevation

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

<?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>

显示如下图像:

Image showing android screen with 2 green squares with the same elevation. However, one of the squares are displayed below a with lower elevation.

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

我理解提升是从视图的直接父级继承的,但如果视图具有更高的高程,则视图不应显示在另一视图上方吗?

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

为了简化,我的目标是:

  • 没有高程的ViewGroup。
  • 具有8dp高程的ViewGroup的子视图
  • 查看(ViewGroup的兄弟),子视图下方显示7dp高程。

2 个答案:

答案 0 :(得分:0)

您只需将指定的高程切换为根布局:

<?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>

答案 1 :(得分:0)

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