Android Multiline Toolbar Title

梦想与她 提交于 2019-12-10 04:24:41

问题


I have a Toolbar that when in landscape mode isn't as wide as usual, but it has more height than usual and for that reason I want to set the title to be multiline (2 lines to be precise) when it is in landscape. I have tried some things where I put a TextView inside of the Toolbar, but when I try to access the TextView to set it's title (since the the title is variable) I get a NullPointer after using findViewById.

Here is some code of the current situation (without multiline):

@Override
protected void onResume() {
    super.onResume();
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar2);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = (int)( size.x * 0.37);
        int height =  Math.round(size.x * 0.63f * 0.25f);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width,height);
        toolbar.setLayoutParams(params);
    }
    if (executeOnResume) {
        currentProject = getIntent().getParcelableExtra("Project");
        getSupportActionBar().setTitle("This is a pretty long piece of text, I hope it fits");
        // A lot of irrelevant code...
        //...
        //...
    } else { loadStuff();}
}

And here is the toolbar xml:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar2"
        android:title="@string/menuLabel1a"
        app:layout_widthPercent="37%"
        app:layout_heightPercent="26%"
        android:gravity="top"
        app:titleTextAppearance="@style/toolbarTitleText"
        android:background="@color/greyLight"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

回答1:


Try this :

 <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar2"
    android:layout_width="match_parent"
    android:layout_height="@dimen/double_height_toolbar"
    android:gravity="top"
    app:titleTextAppearance="@style/toolbarTitleText"
    android:background="@color/greyLight"
    android:theme="@style/AppTheme.AppBarOverlay"
    app:popupTheme="@style/AppTheme.PopupOverlay">

        <TextView
            android:id="@+id/product_details_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top"
            android:title="@string/menuLabel1a"
            android:paddingTop="@dimen/padding_normal"
            style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"
            android:maxLines="2" />

</android.support.v7.widget.Toolbar>

Other Solution is for ActionBar

The default TextView of the ActionBar does not support line wrapping, and there is no exposed method to set it to wrap. So you can create a flexible layout, like this: action_bar_title_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<TextView
    android:id="@+id/action_bar_title"
    android:layout_height="match_parent"
    android:layout_width="wrap_content"
    android:gravity="center_vertical"
    android:ellipsize="end"
    android:maxLines="2"/>

</LinearLayout>

Then set this as the custom layout on your ActionBar:

ActionBar actionBar = getActionBar();
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(R.layout.action_bar_title_layout);
((TextView) findViewById(R.id.action_bar_title)).setText(
    "This is a long text title that will wrap to multiple lines, when necessary.");


来源:https://stackoverflow.com/questions/37479043/android-multiline-toolbar-title

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!