設置Toolbar標題居中(使用TextView和直接設置Toolbar兩種實現方式)

Toolbar居中是困擾我很長一段時間的問題,主要是Toolbar默認不是水平居中,這種居中還是挺好看的(支付寶就是偏左,的確很好看),但是我UI太爛,所以不居中感覺很難受
第一種
1、佈局添加TextView

<?xml version="1.0" encoding="utf-8"?>
<!--AppBarLayout主要用來實現標題摺疊功能elevation:陰影高度-->
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    android:elevation="0dp">

    <!--Toolbar控件-->

    <androidx.appcompat.widget.Toolbar
        android:background="@color/blue"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:popupTheme="@style/AppTheme.PopupOverlay" >
        <TextView
            android:textSize="20sp"
            android:textColor="@android:color/white"
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" />
    </androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>

2、獲取控件設置標題

//設置TextView的內容
toolbar_title.setText(title);
//暴力清空toolbar的默認標題,不設置的話會默認顯示application的label屬性值
toolbar.setTitle("");

第二種
通過獲取Toolbar的標題子控件,設置子控件的對齊方式設置Toolbar居中
xml佈局

<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    android:elevation="0dp">

    <!--Toolbar控件-->

    <androidx.appcompat.widget.Toolbar
        app:collapsedTitleGravity="center"
        app:contentInsetStart="0dp"
        app:contentInsetLeft="0dp"
        app:titleMargin="0dp"
        android:background="@color/blue"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:popupTheme="@style/AppTheme.PopupOverlay" >
    </androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
	/***
     * 設置Toolbar標題居中
     */
    public void setToolbarTitleCenter() {
        String title = "title";
        final CharSequence originalTitle = toolbar.getTitle();
        toolbar.setTitle(title);
        for (int i = 0; i < toolbar.getChildCount(); i++) {
            View view = toolbar.getChildAt(i);
            if (view instanceof TextView) {
                TextView textView = (TextView) view;
                if (title.equals(textView.getText())) {
                    textView.setGravity(Gravity.CENTER);
                    Toolbar.LayoutParams params = new Toolbar.LayoutParams(Toolbar.LayoutParams.WRAP_CONTENT, Toolbar.LayoutParams.MATCH_PARENT);
                    params.gravity = Gravity.CENTER;
                    textView.setLayoutParams(params);
                }
            }
            toolbar.setTitle(originalTitle);
        }
    }

我還是喜歡第二種,但是兩種都能實現。我喜歡第二種的原因是可以直接在Mainfests中設置活動的名稱,需要居中的活動繼承基礎活動就可以實現居中效果,很方便,而如果採用第二種方式,繼承自基礎活動的活動還需要傳值或者調用對象方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章