簡體   English   中英

Android 多行工具欄標題

[英]Android Multiline Toolbar Title

我有一個工具欄,它在橫向模式下不像平時那么寬,但它的高度比平時高,因此我想在橫向模式下將標題設置為多行(准確地說是 2 行)。 我嘗試了一些將 TextView 放在工具欄內的方法,但是當我嘗試訪問 TextView 以設置它的標題時(因為標題是可變的),我在使用 findViewById 后得到了一個 NullPointer。

這是當前情況的一些代碼(沒有多行):

@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();}
}

這是工具欄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" />

嘗試這個 :

 <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>

其他解決方案適用於ActionBar

ActionBar的默認TextView不支持換行,並且沒有公開的方法將其設置為換行。 所以你可以創建一個靈活的布局,如下所示: 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>

然后將其設置為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.");

找到了這個對我有用的解決方案:

fun Toolbar.disableTitleSingleLine() {
    for (i in 0..childCount) {
        val child = getChildAt(i)
        if (child is TextView) {
            child.isSingleLine = false
        }
    }
}

根據Toolbar實現,在設置文本時創建標題TextView 在標題集之后調用這個擴展很重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM