如何在不使用自定义视图的情况下将操作栏标题对齐到中心

问题描述 投票:0回答:4

我想在没有自定义视图帮助的情况下将操作栏标题对齐到中心。我将不胜感激任何帮助。

不使用自定义视图,只修改默认操作栏标题

android android-actionbar
4个回答
5
投票

使用

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.


1
投票

好的,你可以试试这个:

<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("");

0
投票

没有自定义视图似乎没有办法做到这一点。可以获取标题视图:

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

0
投票

此解决方案以编程方式将居中的 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) }
© www.soinside.com 2019 - 2024. All rights reserved.