标题中有两行的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工具栏?的主要内容,如果未能解决你的问题,请参考以下文章

Angular:每个 tr 元素内有两行的 HTML 表

如何在android表格布局中合并两行

如何在我的表中有两行跨越多列,同时仍与引导程序兼容?

具有两个标题行的表排序器

两行代码搞定Android视图扩散切换效果

如何更改android ListView中特定行的样式