Расширенная панель инструментов с пользовательским представлением, не отображаемым с полной шириной

Я просмотрел множество ответов, связанных с панелью инструментов, но ни один из ответов не помог мне.

То, что я пытаюсь достичь, состоит в том, чтобы иметь расширенную панель инструментов, на которой будет отображаться логотип, возможно, имя 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.

Теперь в моем XML BaseActivity я включаю панель инструментов в 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> 

Однако, когда я использую панель инструментов, я раздуваю меню на ActionBar в onCreateOptionsMenu, мое пользовательское представление становится сжатым и не будет расширять край созданных параметров. На картинке ниже показано, что это лучше, Это скриншот из дизайна в Android Studio. Желтый прямоугольник указывает, где будут размещаться элементы опций. Фиолетовый указывает исходный размер в DesignView. Черный указывает размер при запуске приложения.

Конструктивный вид панели инструментов

Спасибо за любую помощь.

Связанные вопросы, которые могут быть полезны любому, кто сталкивается с этим, чтобы решить аналогичную проблему:

  • Design – Поддержка панелей инструментов без использования полной ширины
  • Как настроить расширенную панель инструментов на Android L

Solutions Collecting From Web of "Расширенная панель инструментов с пользовательским представлением, не отображаемым с полной шириной"

Итак, чтобы добиться этого и полностью контролировать прокладку на панели инструментов, я создал две панели инструментов. Первая панель инструментов со стандартной высотой 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> 

Введите описание изображения здесь

Из документации панели инструментов :

Один или несколько пользовательских представлений. Приложение может добавлять произвольные дочерние представления на панель инструментов. Они появятся в этой позиции в макете. Если панель инструментов ChildView.LayoutParams указывает значение Gravity для CENTER_HORIZONTAL, представление попытается центрировать в пределах доступного пространства, оставшегося на панели инструментов, после того, как будут измерены все остальные элементы.

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