工具栏标题全宽

时间:2014-12-16 10:23:21

标签: android android-toolbar

如何/是否可以使标题跨越工具栏的整个宽度?目前文本被菜单项切断。

我尝试使用不同的xml属性,例如paddingEndcontentInsetRighttitleMarginEnd但没有结果。

谢谢! :)

Toolbar with ellipsized title

2 个答案:

答案 0 :(得分:1)

通常,标题总是必须适合工具栏的菜单&操作项目,以便在工具栏折叠时移动标题。

一个简单的方法是在工具栏中放置TextView并将工具栏的背景设置为透明。另请注意我是如何将高程设置为LinearLayout并在工具栏上禁用它的(尽管截图中的阴影因为我在KitKat设备上运行而无法显示)。

<!-- App Bar container -->
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/blue"
    android:elevation="2dp"
    android:orientation="vertical">

    <!-- App Bar -->
    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:elevation="0dp"
        android:gravity="center"
        android:minHeight="?attr/actionBarSize">
    </android.support.v7.widget.Toolbar>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="6dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:text="Title below the AppBar itself."
        android:textColor="#fff"
        android:textSize="20sp"/>
</LinearLayout>

这给出了以下结果:

Full width title between appbar

这可能看起来像两个额外的视图,但请记住,如果您没有为ToolBar设置标题,那么没有TextView在那里膨胀。净结果仍然是一个额外的视图。

答案 1 :(得分:0)

一个hackish解决方案

private void fixToolbarTitleBug()
{
    fixToolbarTitleBug("mTitleTextView");
}

private void fixToolbarTitleBug(String fieldName)
{
    try
    {
        Field field=Toolbar.class.getDeclaredField(fieldName);
        field.setAccessible(true);
        TextView titleTextView=(TextView) field.get(toolbar);
        Toolbar.LayoutParams params=(Toolbar.LayoutParams) titleTextView.getLayoutParams();
        params.width=ScreenSize.width()*3/4; //replace this
        titleTextView.setLayoutParams(params);
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

用法:您必须在setTitle之后调用它,否则它将无法工作,因为在您第一次设置工具栏标题后,mTitleTextView被添加到工具栏中。

supportActionBar.setTitle(title);
fixToolbarTitleBug();

如果你有一个带有标题和subtile的工具栏,你也可以使用

private void fixToolbarSubtitleBug()
{
    fixToolbarTitleBug("mSubtitleTextView");
}

用法:

supportActionBar.setSubtitle(subtitle);
fixToolbarSubtitleBug();