我在这里找到了很多与工具栏相关的答案,但没有一个答案可以帮助我。
我想要实现的是拥有一个扩展的工具栏,它将显示一个徽标,可能是一个活动/应用程序的名称,它将有一个动作按钮/抽屉切换到右侧,将显示一个导航右边的抽屉,带有其他选项的溢出菜单,如设置和底部的导航标签,允许用户在不同的片段(一个月中的不同日期)之间移动。
我试图实现这一目标的方法是通过工具栏。 首先,我创建工具栏并添加我的自定义视图。
<?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上对菜单进行了充气,我的自定义视图会缩小,并且不会扩展所创建选项的边缘。 下面的图片说明了更好,它是Android Studio中设计视图的屏幕截图。 黄色矩形表示将放置选项的位置。 紫色表示DesignView中的原始大小。黑色表示运行应用程序时的大小。
感谢您的帮助。
相关问题可能对遇到此问题以解决类似问题的人有用:
答案 0 :(得分:17)
因此,为了实现这一点并完全控制工具栏中的填充,我创建了两个工具栏。第一个工具栏标准高度为56dp,第二个工具栏高度为72dp,它们共同构成了一个双层工具栏,由材料设计指定。
因为我没有给第二个工具栏中的任何菜单项充气,所以我所有的cusotm视图都按照需要运行。
这些行仍然需要使用
app:contentInsetStart="0dp"
app:contentInsetEnd="0dp"
app:contentInsetLeft="0dp"
app:contentInsetRight="0dp"
android:clipToPadding="false"
这解决了我的问题所以现在我将两个工具栏包含在我的XMl中。
答案 1 :(得分:5)
从设计支持库的第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>
答案 2 :(得分:1)
来自Toolbar文档:
一个或多个自定义视图。应用程序可能会添加任意子项 工具栏的视图。他们将出现在这个位置 布局。如果子视图的Toolbar.LayoutParams表示重力 值为CENTER_HORIZONTAL的视图将尝试居中 所有其他元素都有后,工具栏中剩余的可用空间 被测量了。
因此,从它的外观来看,您的自定义视图的行为应该如此。选项菜单占用工具栏中的一定空间,因此工具栏会测量自定义视图的剩余空间。