除非折叠,否则CollapsingToolbarLayout setTitle()不会更新

Ama*_*i82 26 android material-design android-toolbar android-design-library android-collapsingtoolbarlayout

使用新的设计库,我们应该设置工具栏标题CollapsingToolbarLayout,而不是它Toolbar自己(至少在使用折叠工具栏时).但setTitle()只在以下特定情况下更新标题:

1)当CollapsingToolbarLayout还没有标题时

2)此刻CollapsingToolbarLayout变得完全崩溃

3)此刻CollapsingToolbarLayout开始扩大

我实际上要做的是让标题成为EditText完全展开时的标题,允许用户为他/她的角色命名,然后显示为标题.我试图通过调用invalidate()或者requestLayout()以及这两种方法来强制解决这个问题 CollapsingToolbarLayout.没有效果.

有任何想法吗?

dou*_*leA 27

编辑:不再需要此解决方案.在v22.2.1中修复的错误

我不想留下链接,所以这里是完整的解决方案.

出现该错误的原因是,如果当前标题为null或文本大小已更改,则处理可折叠标题的代码仅更新实际标题.解决方法是更改​​标题文本大小,然后将其更改回来.我使用0.5 sp所以没有太多的跳跃.更改文本大小会强制更新文本,并且不会出现闪烁.只是略微改变文字大小.

这就是我所拥有的

private void setCollapsingToolbarLayoutTitle(String title) {
    mCollapsingToolbarLayout.setTitle(title);
    mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBar);
    mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBar);
    mCollapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.ExpandedAppBarPlus1);
    mCollapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.CollapsedAppBarPlus1);
}
Run Code Online (Sandbox Code Playgroud)

在styles.xml我有

<style name="ExpandedAppBar" parent="@android:style/TextAppearance.Medium">
    <item name="android:textSize">28sp</item>
    <item name="android:textColor">#000</item>
    <item name="android:textStyle">bold</item>
</style>

<style name="CollapsedAppBar" parent="@android:style/TextAppearance.Medium">
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textStyle">normal</item>
</style>

<style name="ExpandedAppBarPlus1" parent="@android:style/TextAppearance.Medium">
    <item name="android:textSize">28.5sp</item>
    <item name="android:textColor">#000</item>
    <item name="android:textStyle">bold</item>
</style>

<style name="CollapsedAppBarPlus1" parent="@android:style/TextAppearance.Medium">
    <item name="android:textSize">24.5sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textStyle">normal</item>
</style>
Run Code Online (Sandbox Code Playgroud)

快乐的编码.

  • 不再需要这种解决方法.修正了v22.2.1请@doubleA更新答案 (3认同)
  • 我使用的是v23.0.1,当我将工具栏放在CollapsingToolbarLayout中时,标题没有出现 (3认同)

Tom*_*han 5

好的,我等待Google时有一个解决方法:

  1. https://gist.githubusercontent.com/blipinsk/3f8fb37209de6d3eea99/raw/b13bd20ebb319d94399f0e2a0bedbff4c044356a/ControllableAppBarLayout.java获取要点(我不是原创作者,但对原作者赞不绝口).这增加了一些方法AppBarLayout,即展开和折叠

  2. 在您调用的方法中setTitle():

collapsingToolbar.setTitle("All Recent");
getSupportActionBar().setTitle("All Recent");
collapseThenExpand();
Run Code Online (Sandbox Code Playgroud)
  1. 现在创建一个collapseThenExpand()方法:

private void collapseThenExpand() {
  appbar.collapseToolbar();

  Handler h = new Handler();
  h.postDelayed(new Runnable() {
    @Override
    public void run() {
      appbar.expandToolbar(true);
    }
  }, 800);
}
Run Code Online (Sandbox Code Playgroud)

请注意,您可以通过将展开动画设置为false来关闭展开动画.