我希望有一个双倍高度操作栏(如材料指南示例中所示),但标题中有(可能)2行文本。我使用的标题是动态的,取决于页面中显示的项目。如果有一行它应该看起来像一个普通的操作栏,如果有2行,则文本应该断开并下拉到新行。无论是否有一行或两行,操作按钮都应与文本的顶行保持对齐。
我读到Toolbar是做动作栏的新动态方式所以我认为这可能是要走的路(我知道那里有答案可以让你覆盖旧的动作栏标题textview到使它成为2行,但这看起来不像我要去的那样。我使用的是Android 4.4+,因此我需要将appcompat v7库用于工具栏。
我在查看代码时发现标题textview仅限于一行(https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/appcompat/src/android/support/v7/widget/Toolbar.java - 包含代码mTitleTextView.setSingleLine();
)。
然后我认为,由于下面有单行字幕,我们可以更改该文本的格式,我可以将其格式化为标题文本,并在必要时将我的标题分为两部分。我写了一些基本的代码来分割字符串,但它依赖于能够告诉我是否需要拆分它 - 实际上我发现toolbar.isTitleTruncated()
总是返回false(两者都来自我直接访问的工具栏对象,以及getSupportActionBar().isTitleTruncated()
)。
我尝试了回答here将TextView
包裹在Toolbar
中,但我无法让TextView
与工具栏操作按钮对齐我这样做。如果我为一条线正确对齐(使用顶部填充),那么对于双线来说它是错误的,反之亦然。这是我的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/view_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/fragment_pager"
android:name="com.example.ProductPagerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.v7.widget.Toolbar
android:id="@+id/product_details_toolbar"
style="@style/style.toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/double_height_toolbar"
android:minHeight="?attr/actionBarSize"
android:gravity="top"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >
<TextView
android:id="@+id/product_details_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:paddingTop="@dimen/padding_normal"
style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"
android:maxLines="2" />
</android.support.v7.widget.Toolbar>
有没有人有任何想法?这是否真的与Android指南相反,应该如此困难?
更新:为演示目的添加图片:
应该如何看待:
现在的样子:
答案 0 :(得分:16)
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(getResources().getString(R.string.myTitle));
toolbar.setSubtitle(getResources().getString(R.string.mySubTitle));
setSupportActionBar(toolbar);
教程:
答案 1 :(得分:5)
<android.support.v7.widget.Toolbar
android:layout_height="200dp"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:gravity="top"
android:background="?attr/colorPrimaryDark"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"/>
</android.support.v7.widget.Toolbar>