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

我试图添加一个工具栏标题“makeSceneTransitionAnimation”animation,但像它是私人的,我不能设置一个“transitionName”就可以了。

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

Solutions Collecting From Web of "如何将transitionName设置为工具栏标题?"

自定义标题TextView

因为您正在使用工具栏,所以您可以考虑直接创build自定义标题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); // ... } 

还有很多其他方法可以从XML中禁用默认标题,在这个问题中讨论了一些: 在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> 

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

这种方法允许你对标题视图有更多的控制权,特别是当你需要和sceneTransition一起播放一些附加的TextView属性Animation和你希望能够明确定义标题的最终外观的时候。

查找默认标题TextView

如果您愿意,可以通过不同的方式find默认标题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; } } } 

然后可以设置transitionName

 titleTextView.setTransitionName(/* Transition name */); 

更多的方法来查找标题TextView在这里讨论获取ActionBar标题与AppCompat v7 r21的TextView 。