Как управлять высотой панели инструментов материалов в соответствии с моими собственными предпочтениями?

#android #xml #android-layout #material-design #android-toolbar

#Android #xml #android-layout #материал-дизайн #android-панель инструментов

Вопрос:

Это мой файл макета, и, как вы можете видеть, вместо использования панелей приложений, которые входят в комплект с темами, я использую пользовательскую панель инструментов.

Код:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/dice_roller_activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@ id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@ id/activity_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:title="@string/app_name" />

    </com.google.android.material.appbar.AppBarLayout>

    <ImageView.../>

    <Button.../>

</androidx.constraintlayout.widget.ConstraintLayout>
  

И вот как это выглядит:https://imgur.com/cPSFads

(Обратите внимание, что здесь не используется elevation атрибут).

Я расширяю Theme.MaterialComponents.Light.NoActionBar тему, чтобы иметь возможность использовать свою собственную ToolBar . Теперь проблема в том, что я не могу найти способ изменить высоту панели инструментов. Чтобы изменить высоту, я попытался использовать android:elevation атрибут внутри тега <AppBarLayout> следующим образом:

     <com.google.android.material.appbar.AppBarLayout
        android:id="@ id/app_bar_layout"
        ...
        android:elevation="4dp"
        ...>

        <com.google.android.material.appbar.MaterialToolbar.../>

    </com.google.android.material.appbar.AppBarLayout>

  

и это не имело никакого значения, как вы можете видеть здесь
(Я перепробовал все значения от 0dp до 4dp, это не имеет значения)

Затем я добавил тот же android:elevation атрибут внутри дочернего тега <AppBarLayout>, а именно <MaterialToolbar>, вот так:

     <com.google.android.material.appbar.AppBarLayout...>

         <com.google.android.material.appbar.MaterialToolbar
              android:id="@ id/activity_toolbar"
              ...
              android:elevation="4dp"
              ... />

    </com.google.android.material.appbar.AppBarLayout>
  

и это привело к ужасному беспорядку, подобному этому
это определенно не то, что я хочу.

Затем я попробовал app:elevation атрибут, который не вносил никаких изменений при использовании внутриMaterialToolbar /> tag независимо от значения, которое я использовал, но когда я попробовал тот же app:elevation атрибут внутриAppBarLayout>, он удалил небольшую высоту, которую можно увидеть на исходном скриншоте (который показывает состояние приложения, когда никакие elevation атрибуты не использовались), и сделал его похожим на это (обратите внимание, что в верхней панели больше нет высоты).

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

Если требуется дополнительная информация, вы можете проверить репозиторий github для этого приложения, который я создал:https://github.com/sbeve72/diceroller/tree/unguided-development

PS: Я новичок, и вы, возможно, заметили, что это только первое приложение, которое вы создаете при прохождении курса Udacity от Google.

Комментарии:

1. Используйте app:elevation в AppBarLayout

2. @GabrieleMariotti Братан, ты даже не прочитал вопрос хорошо > «»но когда я попробовал то же приложение: атрибут высоты внутри AppBarLayout>, он удалил небольшую высоту, которую можно увидеть на исходном скриншоте (который показывает состояние приложения, когда атрибуты высоты не использовались), и сделал его похожим на это (обратите внимание, что в верхней панели больше нет высоты).»»

Ответ №1:

Попробуйте удалить AppBarLayout и установить android:background на свой MaterialToolbar , высота может контролироваться android:elevation тогда:

 <com.google.android.material.appbar.MaterialToolbar
    android:id="@ id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    android:elevation="0dp" />
  

Ознакомьтесь с новейшей библиотекой Material Design стабильной версии 1.4

Комментарии:

1. действительно, в некоторых руководствах есть appbarlayout, но документ materialtoolbar предлагает использовать его как автономный