Расширенная панель инструментов с пользовательским видом не отображается с полной шириной
Я просмотрел множество ответов, связанных с панелью инструментов, но ни один из них не помог мне.
То, чего я пытаюсь добиться, - это иметь расширенную панель инструментов, на которой будет отображаться логотип, возможно, название Activity/App, а также кнопка действия / ящик, переключаемый вправо, который будет отображать панель навигации, похожую на навигационную панель. справа, меню переполнения с другими параметрами, такими как настройки, а также вкладка навигации внизу, которая позволит пользователю перемещаться между различными фрагментами (разными днями в месяце).
Я пытаюсь добиться этого через панель инструментов. Сначала я создаю панель инструментов и добавляю свой собственный вид.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar_actionbar"
android:layout_width="match_parent"
android:layout_height="@dimen/min_double_toolbar_height"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
android:minHeight="?attr/actionBarSize"
android:background="@color/primary"
app:contentInsetStart="0dp"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
android:clipToPadding="false"
>
<!-- ThemeOVerlay Makes sure the text and items are using solid colors-->
<include
android:layout_width="match_parent"
android:layout_height="72dp"
android:layout_gravity="bottom"
layout="@layout/day_navigation_tab"
/>
</android.support.v7.widget.Toolbar>
day_navigation_tab - это просто горизонталь с двумя видами изображений с отступом 72dp (как в соответствии с рекомендациями) и текстовым видом с весом макета, установленным в 1, поэтому он растягивается на все доступное пространство. И высота 72dp.
Теперь в моем BaseActivity XML я включаю панель инструментов в Framelayout основного контекста (в противном случае панель инструментов покрывала бы весь экран по неизвестной мне причине (мне потребовались годы, чтобы понять это))
<...ommited>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/app_bar"
/>
</FrameLayout>
<!-- android:layout_gravity="start" tells DrawerLayout to treat
this as a sliding drawer on the left side for left-to-right
languages and on the right side for right-to-left languages.
If you're not building against API 17 or higher, use
android:layout_gravity="left" instead. -->
<!-- The drawer is given a fixed width in dp and extends the full height of
the container. -->
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="right"
android:name="alterway.agency.timeentry.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer"
app:layout="@layout/fragment_navigation_drawer"
/>
</android.support.v4.widget.DrawerLayout>
Однако, когда я использую панель инструментов, я надуваю Меню на панели действий в onCreateOptionsMenu, и мое настраиваемое представление уменьшается и не расширяет границы созданных параметров. На рисунке ниже это лучше видно. Это снимок экрана с представлением "Дизайн" в Android Studio. Желтый прямоугольник указывает, где будут размещены элементы опций. Фиолетовый указывает на оригинальный размер в DesignView. Черный цвет указывает на размер при запуске приложения.
Спасибо за любую помощь.
Смежные вопросы, которые могут быть полезны всем, кто сталкивается с подобными проблемами:
3 ответа
Поэтому, чтобы добиться этого и получить полный контроль над отступами на панели инструментов, я создал две панели инструментов. Первая панель инструментов со стандартной высотой 56dp и вторая с высотой 72dp, которые вместе составили двухслойную панель инструментов, как указано в дизайне материала.
И поскольку я не надуваю какие-либо пункты меню на второй панели инструментов, все мои представления cusotm внутри себя ведут себя так, как нужно.
Эти строки еще нужно использовать, хотя
app:contentInsetStart="0dp"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
android:clipToPadding="false"
Это решило мою проблему, и теперь я включаю две панели инструментов в свой XMl.
Начиная с версии 23 библиотек поддержки проектирования, существует гораздо более простой способ сделать это, используя android.support.design.widget.CoordinatorLayout
Это пример:
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:popupTheme="@style/AppTheme.PopupOverlay">
</android.support.v7.widget.Toolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/project_light_green"
android:orientation="horizontal"
android:paddingLeft="@dimen/activity_horizontal_margin_half"
android:paddingRight="@dimen/activity_horizontal_margin_half"
android:paddingTop="@dimen/activity_vertical_margin_half">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_margin="12dp"
android:src="@drawable/ic_search_24dp" />
<EditText
android:id="@+id/search_field"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="@null"
android:hint="@string/autocomplete_hint"
android:singleLine="true"
android:textColor="@color/project_black"
android:textColorHint="@color/project_dark_gray"/>
<include layout="@layout/close_button"
android:id="@+id/clearButton"/>
</LinearLayout>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_search_location" />
</android.support.design.widget.CoordinatorLayout>
Из документации панели инструментов:
Один или несколько пользовательских видов. Приложение может добавить произвольные дочерние представления на панель инструментов. Они появятся в этой позиции в макете. Если дочерняя панель инструментов Toolbar.LayoutParams указывает значение Gravity CENTER_HORIZONTAL, представление будет пытаться центрироваться в пределах доступного пространства, оставшегося на панели инструментов, после того, как будут измерены все другие элементы.
Итак, из того, как это выглядит, ваш пользовательский вид ведет себя так, как должен. Меню параметров занимает определенное пространство на панели инструментов, поэтому панель инструментов измеряет оставшееся пространство для вашего пользовательского представления.