自定义视图的扩展工具栏不能以全宽显示

我经历了很多有关工具栏的答案,但是没有一个答案可以帮助我。

我想要实现的是有一个扩展的工具栏,它将显示一个标志,可能是一个活动/应用程序的名称,它将有一个行动button/抽屉切换到右侧,将显示一个类似导航的抽屉正确的,溢出菜单与其他选项,如设置,还有一个导航选项卡在底部,将允许用户在不同的片段(一个月不同的天)之间移动。

我试图达到这一点的方式是通过工具栏。 首先我创build工具栏并添加我的自定义视图。

<?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 actionBar的菜单我的自定义视图被缩小,将不会扩展创build的选项的边缘。 下面的图片说明了这一点,它是Android Studio中Design View的屏幕截图。 黄色矩形表示选项将放置在哪里。 紫色表示DesignView中的原始尺寸。 黑色表示运行应用程序时的大小。

工具栏的设计视图

感谢您的任何帮助。

相关的问题可能对任何遇到这个问题的人都有用,以解决类似的问题:

  • devise – 支持工具栏自定义视图不使用全宽
  • 如何在Android L上设置扩展工具栏

Solutions Collecting From Web of "自定义视图的扩展工具栏不能以全宽显示"

所以为了实现这一点,并完全控制工具栏中的填充,我创build了两个工具栏。 第一个标准高度为56dp的工具栏,第二个高度为72dp的工具栏一起构成了材料devise所规定的双层工具栏。

而因为我没有在第二个工具栏中的任何菜单项膨胀所有我cusotm视图里面的行为是所需的。

这些行仍然需要使用

  app:contentInsetStart="0dp" app:contentInsetEnd="0dp" app:contentInsetLeft="0dp" app:contentInsetRight="0dp" android:clipToPadding="false" 

这解决了我的问题,所以现在我包括两个工具栏到我的XMl。

从版本23的devise支持库有一个更简单的方法来使用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指示CENTER_HORIZONTAL的重力值,则在所有其他元素被测量之后,视图将试图在工具栏中剩余的可用空间内居中。

所以从它看起来,您的自定义视图的行为应该是它应该的。 选项菜单在您的工具栏占用了一定的空间,所以工具栏正在测量自定义视图的剩余空间以适应。