Компонент Android-материала BottomNavigation верхняя тень отличается, когда она находится внизу, а не в центре - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь добавить больше высоты на панель навигации, когда я изменяю высоту с помощью панели в центре layout_gravity, она затеняется, как я и ожидал, но когда я привязываю ее к нижней части, высота переопределяется илитень сбрасывается.

Макет:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">


    <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:elevation="48dp"
            android:background="@android:color/background_light"
            app:itemIconTint="@android:color/primary_text_light"
            app:itemTextColor="@android:color/primary_text_light"
            app:menu="@menu/navbar_menu" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Пример того, как это выглядит: enter image description here enter image description here

1 Ответ

0 голосов
/ 10 февраля 2019

Дело не в том, что тень перезаписывается или сбрасывается, но на самом деле это неправильное понимание теней в Material Design.

В Material Design тени, которые вы видите при изменении высоты вида, фактически рассчитываются на основе того, как тени появляются в объектах реального мира.

В действительности тени не появляютсяне гдеВместо этого они появляются, когда источник света сияет в направлении объекта.Если вы посмотрите на эту ссылку , то увидите, что Google упоминает, что тени в Material Design созданы из двух источников виртуального света.Один источник известен как Key Lights , а другой источник известен как Ambient Lights .

Ключевой источник света создает более четкую и более направленную тень, которая обычно видна более глубокой и темной тенью в нижней части вида, благодаря тому, что ее виртуальный свет падает вниз с верхней части экрана.

Окружающий свет создает более мягкую тень вокруг представления, благодаря тому, что его виртуальный свет падает вниз от центра экрана.Вот почему вы все равно увидите более светлую тень для верхней части вида.Это потому, что не только источник света сияет сверху, но и источник света сияет от центра экрана.

Вот изображение того, как источники света выглядят :

Однако это все, что касается источников света.Внизу экрана нет источника света, поэтому, когда ваш BottomNavigationView находится внизу, вы увидите только очень тонкую тень на верхнем крае BottomNavigationView.Тень такая слабая, ее почти нет.Это считается нормальным.

Когда вы переместили BottomNavigationView в центр экрана, теперь вы помещаете его ближе к двум другим источникам света, поэтому вы получаете более заметную тень,

Google предостерегает от намеренного добавления более глубокой тени к представлениям, поскольку это фактически делает макет неестественным.Другими словами, это не имитирует реальные тени в реальности.Поэтому не пытайтесь специально добавлять более глубокую верхнюю тень к BottomNavigationView, так как это будет выглядеть странно при рассмотрении естественных теней других ваших видов.

Можно утверждать, что вы хотите разместить3-й источник света светит снизу экрана, но не забывайте, что это также будет иметь прямые эффекты для всех других видов на экране.Просто представьте, что на верхней и нижней сторонах каждого вида есть более глубокая более темная тень ... это не совсем так приятно или естественно, как в текущей реализации, у которой более глубокая более темная тень находится только снизу.

Также имейте в виду, что тени в дизайне материалов создаются на основе двух виртуальных источников света.Поэтому не думайте, что Elevation - единственный элемент, влияющий на вид тени.Размер представления, его высота, его положение на экране и, возможно, другие факторы могут быть решающими факторами того, как тень будет отображаться для вашего вида.

Суть в том, что не пытайтесь навязывать тени элементам, потому что это может выглядеть лучше с более богатой тенью.Это может привести к тому, что это будет выглядеть неестественно, что противоречит Material Design, и некоторые пользователи могут это понять.

...