标题中有两行的Android工具栏?
Posted
技术标签:
【中文标题】标题中有两行的Android工具栏?【英文标题】:Android Toolbar with two lines in the title? 【发布时间】:2015-02-03 09:35:48 【问题描述】:我想要一个双高操作栏(如材料指南示例中所示),但标题中(可能)有 2 行文本。我使用的标题是动态的,取决于页面中显示的项目。如果有一行,它应该看起来像一个普通的操作栏,如果有 2 行,那么文本应该中断并下降到新的一行。无论是一行还是两行,操作按钮都应与文本的顶行对齐。
我读到Toolbar 是执行操作栏的新动态方式,所以我认为这可能是要走的路(我知道那里有答案可以让您覆盖旧的操作栏标题 textview 来实现2行,但这看起来也不像我想要的)。我使用的是 android 4.4+,所以我需要为工具栏使用 appcompat v7 库。
我在查看代码时发现标题文本视图仅限于一行(https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/appcompat/src/android/support/v7/widget/Toolbar.java - 包含代码mTitleTextView.setSingleLine();
)。
然后我想既然下面有一个单行字幕,我们可以更改该文本的格式,我可以将其格式化为与标题文本相同的格式,并在必要时将我的标题分成两部分。我编写了一些基本代码来拆分字符串,但它依赖于能够判断我是否需要拆分它——实际上我发现toolbar.isTitleTruncated()
总是返回 false(都来自我直接访问的工具栏对象,以及来自@987654329 @)。
我尝试使用答案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_
android:layout_>
<fragment
android:id="@+id/fragment_pager"
android:name="com.example.ProductPagerFragment"
android:layout_
android:layout_ />
<android.support.v7.widget.Toolbar
android:id="@+id/product_details_toolbar"
style="@style/style.toolbar"
android:layout_
android:layout_
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_
android:layout_
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 准则的事情,以至于它应该如此困难吗?
更新:添加图片用于演示:
它应该是什么样子:
现在的样子:
【问题讨论】:
我为 isTitleTruncated() 不起作用的问题创建了code.google.com/p/android/issues/detail?id=81987。 【参考方案1】:Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(getResources().getString(R.string.myTitle));
toolbar.setSubtitle(getResources().getString(R.string.mySubTitle));
setSupportActionBar(toolbar);
教程:
ToolBar Example
Add Title, Subtitle, Color to Actionbar/Toolbar
【讨论】:
【参考方案2】:嗯,对我来说很好用。
<android.support.v7.widget.Toolbar
android:layout_
android:layout_
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_
android:layout_
android:text="Title"
android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"/>
</android.support.v7.widget.Toolbar>
【讨论】:
如果我有一行文字,这对我来说很好。如果我有两个,那么对齐就会变得一团糟。尝试使用更长的标题。 请勿在此解决方案中使用 toolbar.setTitle()。获取 Toolbar 视图中的 TextView 并以编程方式设置它的文本。以上是关于标题中有两行的Android工具栏?的主要内容,如果未能解决你的问题,请参考以下文章