中心操作栏标题
Center Action bar title
如何使 activity 的操作栏标题在 Android 中居中?
我看到很多关于这个特定主题的问题。每个答案都会返回 "using custom view" 并拥有您自己的工具栏。
我找到了一个无需创建自定义视图即可工作的解决方案。
在你的 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();
就是这样了!!!
<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>
在 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()
您可以使用此解决方案。但它不会忽略工具栏中的其他元素。
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
}
}
}
如何使 activity 的操作栏标题在 Android 中居中?
我看到很多关于这个特定主题的问题。每个答案都会返回 "using custom view" 并拥有您自己的工具栏。
我找到了一个无需创建自定义视图即可工作的解决方案。
在你的 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();
就是这样了!!!
<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>
在 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()
您可以使用此解决方案。但它不会忽略工具栏中的其他元素。
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
}
}
}