我想在没有自定义视图帮助的情况下将操作栏标题对齐到中心。我将不胜感激任何帮助。
不使用自定义视图,只修改默认操作栏标题
使用
ActionBar
时,您可以将标题居中对齐,但您可以使用Toolbar
来执行此操作。
Toolbar
比ActionBar
更有用也更容易,您可以使用此布局为您的活动定义中心标题TextView
:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="40dip">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/app_name" />
</android.support.v7.widget.Toolbar>
并将此代码用于后退按钮:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_toolbar);
Toolbar toolbar = (Toolbar) findViewById(R.id.single_toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
菜单还需要重写
onCreateOptionsMenu
方法,可以参考这个项目:chrisbanes/cheesesquare.
好的,你可以试试这个:
<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:textColor="#fff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_gravity="center"
android:text="@string/app_name" />
</android.support.v7.widget.Toolbar>
记得在您的活动的 java 代码中添加这一行:
getSupportActionBar.setTitle("");
没有自定义视图似乎没有办法做到这一点。可以获取标题视图:
View decor = getWindow().getDecorView();
TextView title = (TextView) decor.findViewById(getResources().getIdentifier("action_bar_title", "id", "android"));
但是改变 gravity 或 layout_gravity 没有效果。 ActionBarView 中的问题,它自行布局其子项,因此更改其子项的布局参数也没有效果。要查看此代码,请执行以下代码:
ViewGroup actionBar = (ViewGroup) decor.findViewById(getResources().getIdentifier("action_bar", "id", "android"));
View v = actionBar.getChildAt(0);
ActionBar.LayoutParams p = new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
p.gravity= Gravity.CENTER;
v.setLayoutParams(p);
v.setBackgroundColor(Color.BLACK);
此解决方案以编程方式将居中的 TextView 添加到 Toolbar:
TextView(this).apply {
text = getString(R.string.settingsLocaleTitle)
typeface = Typeface.DEFAULT_BOLD
textSize = 20f
layoutParams = Toolbar.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
).apply {
gravity = Gravity.CENTER
}
}.also { toolbar.addView(it) }