居中工具栏标题

时间:2015-08-25 21:45:36

标签: android android-actionbar android-toolbar

我有自定义toolbar,我正在使用TextSwitcher。我的问题是我将文本居中,但当我应用后退按钮时,文本向右移动。我假设这是由按钮创建它自己的布局移动现有的布局。我注意到如果我在toolbar上启用选项,文本会再次居中,但我不想这样做。我尝试将选项的可见性设置为隐藏,但这似乎完全删除了元素。我宁愿不创建自定义后退按钮,所以任何帮助将不胜感激。以下代码位于我的onCreate中的Activity方法中:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    TextSwitcher tvToolbar = (TextSwitcher) findViewById(R.id.textSwitcher);
    tvToolbar.setFactory(new ViewSwitcher.ViewFactory() {

        public View makeView() {
            TextView myText = new TextView(MyActivity.this);
            myText.setGravity(Gravity.CENTER);
            myText.setSingleLine(true);
            myText.setTextSize(24);
            myText.setTextColor(Color.WHITE);
            myText.setText("Booths");
            return myText;
        }
    });

    setSupportActionBar(toolbar);
    android.support.v7.app.ActionBar mActionBar = getSupportActionBar();
    if (mActionBar != null) {
        mActionBar.setDisplayHomeAsUpEnabled(true);
        mActionBar.setElevation(4);
    }

2 个答案:

答案 0 :(得分:4)

最好的办法是创建Toolbar并在Toolbar中添加允许定位的布局:

<?xml version="1.0" encoding="utf-8?>
<android.support.v7.widget.Toolbar
   android:id="@+id/toolbar"
   android:layout_width="fill_parent"
   android:layout_height="?actionBarSize">
   <android.support.v7.widget.AppCompatTextView
      android:text="My Title"
      android:textSize="24sp"
      android:textColor="#FFF"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"/>
</android.support.v7.widget.Toolbar>

或在您的特定情况下使用TextSwitcher

<?xml version="1.0" encoding="utf-8?>
<android.support.v7.widget.Toolbar
   android:id="@+id/toolbar"
   android:layout_width="fill_parent"
   android:layout_height="?actionBarSize">
       <TextSwitcher
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center">
             <android.support.v7.widget.AppCompatTextView
                    android:text="My Title"
                    android:textSize="24sp"
                    android:textColor="#FFF"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
       </TextSwitcher>
 </android.support.v7.widget.Toolbar>

答案 1 :(得分:0)

我假设您正在尝试设置工具栏标题的动画,所以这就是我要做的事情:

- 首先你需要一个FrameLayout父级作为标题,所以当你为它设置动画时,你不会与某些图标重叠(最明显的是抽屉图标)

- 然后是简单的TextView,即标题,只需使用ToolBarTitle样式,你不需要任何其他东西。

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity=""
android:background="?attr/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >

<!-- This layout is used so the animation for the title view,does not overlap the drawer icon -->

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="" >

    <TextView
        android:id="@+id/toolbar_title"
        style="@style/ToolbarTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</FrameLayout>

当您对工具栏布局进行充气时,请确保将原始工具栏标题设置为空字符串,以使其不会与我们的自定义重叠

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle("");

    toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);

现在您可以根据需要轻松制作标题动画,这是我的实现,每当我更改标题时,动画从左侧滑动并向左滑动的标题。

/**
 * Changes the action bar title.
 */
@Override
public void setTitle(final CharSequence title) {
    mTitle = title;
    Animation makeOut = AnimationUtils.makeOutAnimation(
            MainMenuActivity.this, false);
    makeOut.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationEnd(Animation animation) {
            toolbarTitle.setText(title);
            toolbarTitle.startAnimation(AnimationUtils.makeInAnimation(
                    MainMenuActivity.this, true));
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }

        @Override
        public void onAnimationStart(Animation animation) {

        }
    });
    toolbarTitle.startAnimation(makeOut);

}