我有自定义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);
}
答案 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);
}