Вид, отображаемый под другим видом, который имеет более низкую отметку в Android - PullRequest
0 голосов
/ 22 мая 2018

Я столкнулся с, казалось бы, странной проблемой, когда представление отображается под другим представлением с более низким возвышением, когда представление содержится в родительской группе представлений.Ниже приведен фрагмент кода с самым простым примером, который я могу сделать.Виды (квадраты) имеют одинаковую высоту.

<?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 с 2 зелеными квадратами с одинаковой высотой.Тем не менее, один из квадратов отображается ниже a с более низкой отметкой.

Я попытался изменить тип макета как корня, так и родителя отображаемого представления, не имеет значения.

Я понимаю, что высота унаследована от непосредственного родителя вида, но не следует ли отображать вид выше другого, если он имеет более высокую высоту?

Я также сравнил два квадрата вИнспектор макетов в Android Studio.Единственными отличиями были x-позиции (и идентификаторы).

Чтобы упростить, моя цель состоит в том, чтобы:

  • ViewGroup без возвышения.
  • Child-представление этой ViewGroup с высотой 8dp
  • View (родственный элемент ViewGroup) с высотой 7dp, отображаемой под дочерним представлением.

1 Ответ

0 голосов
/ 22 мая 2018

Вам просто нужно переключить назначенную высоту на корневой макет:

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