如何将transitionName设置为工具栏标题?

Bus*_*ata 8 android android-animation material-design

我正在尝试在工具栏标题中添加带有"makeSceneTransitionAnimation"的动画,但是就像它是私有的一样,我不能在其上设置"transitionName".

如果有人知道如何解决这个或知道其他方式帮助我.

Umb*_*mbo 2

自定义标题TextView

因为您使用的是 Toolbar,所以您可以考虑直接创建自定义标题 TextView 的可能性:

禁用默认的 ActionBar 标题:

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // Either by calling
    getSupportActionBar().setTitle(null);
    // Or
    toolbar.setTitle(null);
    // Or
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以禁用 XML 中的默认标题,以下问题中讨论了一些方法:Remove title in Toolbar in appcompat-v7。

然后在 Activity 的布局文件中在 Toolbar 中添加自定义标题 TextView:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:theme="@style/AppTheme"
        app:popupTheme="@style/AppTheme.PopupOverlay">

     <TextView
            android:id="@+id/custom_title"
            android:text="@string/activity_title"
            android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
            android:transitionName="@string/title_transition_name"/>

 </android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

textAppearance可用于应用与默认 ActionBar 标题相同的样式。

这种方法允许您对标题视图有更多的控制,特别是当您需要与您一起使用一些附加TextView属性并且您希望能够显式定义标题的最终外观时。 AnimationsceneTransition

查找默认标题TextView

如果您愿意,可以通过不同的方式找到默认标题 TextView:

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // This assumes that the title is the first child of Toolbar
    TextView titleTextView = (TextView) toolbar.getChildAt(0);
    // Or this assumes that the title is the first TextView inside of Toolbar
    for(int i = 0; i < toolbar.getChildCount(); ++i) {
        View child = toolbar.getChildAt(i);
        if(view instanceof TextView) {
            titleTextView = (TextView) view;
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以transitionName设置:

titleTextView.setTransitionName(/* Transition name */);
Run Code Online (Sandbox Code Playgroud)

此处讨论了查找标题 TextView 的更多方法Getting ActionBar Title TextView with AppCompat v7 r21。