簡體   English   中英

中心動作欄標題

[英]Center Action bar title

如何在Android中將活動的操作欄標題居中?

我已經看到很多關於此特定主題的問題。 每個答案都回到“使用自定義視圖”並擁有自己的工具欄。

我找到了一種無需創建自定義視圖即可使用的解決方案。

在您的Activity此方法:

private void centerTitle() {
    ArrayList<View> textViews = new ArrayList<>();

    getWindow().getDecorView().findViewsWithText(textViews, getTitle(), View.FIND_VIEWS_WITH_TEXT);

    if(textViews.size() > 0) {
        AppCompatTextView appCompatTextView = null;
        if(textViews.size() == 1) {
            appCompatTextView = (AppCompatTextView) textViews.get(0);
        } else {
            for(View v : textViews) {
                if(v.getParent() instanceof Toolbar) {
                    appCompatTextView = (AppCompatTextView) v;
                    break;
                }
            }
        }

        if(appCompatTextView != null) {
            ViewGroup.LayoutParams params = appCompatTextView.getLayoutParams();
            params.width = ViewGroup.LayoutParams.MATCH_PARENT;
            appCompatTextView.setLayoutParams(params);
            appCompatTextView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
        }
    }
}

然后,只需在您的onCreate()調用它即可:

centerTitle();

而已!!!

在Kotlin中,您可以:

private fun centerTitle() {
        val textViews = ArrayList<View>()
        window.decorView.findViewsWithText(textViews, title, View.FIND_VIEWS_WITH_TEXT)
        if (textViews.size > 0) {
            var appCompatTextView: AppCompatTextView? = null
            if (textViews.size == 1)
                appCompatTextView = textViews[0] as AppCompatTextView
            else {
                for (v in textViews) {
                    if (v.parent is Toolbar) {
                        appCompatTextView = v as AppCompatTextView
                        break
                    }
                }
            }
            if (appCompatTextView != null) {
                val params = appCompatTextView.layoutParams
                params.width = ViewGroup.LayoutParams.MATCH_PARENT
                appCompatTextView.layoutParams = params
                appCompatTextView.textAlignment = View.TEXT_ALIGNMENT_CENTER
            }
        }
    }

然后在onCreate()調用centerTitle() onCreate()

您可以使用此解決方案。 但這並不會忽略工具欄中的其他元素。

fun setToolbarTextAlignment(textAlignment: Int) {
    for (i in 0..toolbarView.childCount) {
        (toolbarView.getChildAt(i) as? TextView)?.let {
            it.layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
            it.textAlignment = textAlignment
        }
    }
}
 <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

          <TextView
              android:layout_width="match_parent"
              android:layout_height="match_parent" 
              android:gravity="center"
              android:text="haiii"/>
 </android.support.v7.widget.Toolbar>

暫無
暫無

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

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