【问题标题】:Android: CollapsingToolbarLayout and SearchView, text overlappingAndroid:CollapsingToolbarLayout和SearchView,文字重叠
【发布时间】:2015-06-09 21:09:48
【问题描述】:

我对将 CollapsingToolbarLayout 标题与 SearchView 文本重叠没有什么问题。 CollapsingToolbarLayout什么时候展开没问题:

但是当被折叠时,文字是重叠的:

如何解决?

【问题讨论】:

  • a) 小部件的行为与预期完全一致。没有解决办法。 b) 看看 Play Store 是如何解决它的。搜索操作图标展开为覆盖活动的搜索卡。
  • 感谢您的解释。我认为现在对我来说最好在单击搜索按钮时展开 CollapsingToolbarLayout,但代码仍然无法正常工作:stackoverflow.com/a/30729413/3796931.
  • @EugenPechanec 我认为这不是正确的行为,Play Store 方法可能不是理想的方法。此外,它不稳定,我的 nexus 4 运行良好,而 nexus 5 则不行。
  • 顺便说一句,我刚刚向问题跟踪器code.google.com/p/android/issues/…报告了

标签: android searchview android-collapsingtoolbarlayout


【解决方案1】:

我尝试了 Tomas 的答案,但它有一个问题,即一旦用户滚动,appbar 再次崩溃,问题再次出现。

所以我想出了另一种解决方案,即在展开搜索视图时使折叠的标题文本透明。这很好用,不依赖或更改应用栏的折叠/展开状态。

简单地说:

    if (searchViewExpanding) {
        collapsingToolbarLayout.setCollapsedTitleTextColor(Color.TRANSPARENT);
    } else {
        collapsingToolbarLayout.setCollapsedTitleTextColor(Color.WHITE);
    }

当然,您需要处理搜索菜单项的setOnActionExpandListener 才能知道何时调用它。

【讨论】:

  • 我也使用这个解决方案,但我忘了更新这个页面;)谢谢
  • 嗨,格雷格,我正在尝试像这样使用您的解决方案:MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {public boolean onMenuItemActionExpand(MenuItem item) {collapsingToolbar.setCollapsedTitleTextColor(Color.TRANSPARENT); return true; } public boolean onMenuItemActionCollapse(MenuItem item) { collapsingToolbar.setCollapsedTitleTextColor(Color.WHITE); return true;} }); 但如果我在工具栏折叠时关闭我的搜索视图,文本不会恢复为白色。你能帮帮我吗?
  • 我不知道为什么它对你不起作用,当搜索视图折叠时代码没有被执行?
  • 嗨,格雷格,我在这里提出了一个新问题 [链接]stackoverflow.com/questions/32936050/…,它更好地描述了我的问题。我的代码应该被执行,因为在那些 searchview 回调中我保存了一个布尔值,它告诉视图是否打开(我用它来保持设备旋转之间的 searchview 状态,它工作正常)。
【解决方案2】:

现在的答案很简单,当点击搜索按钮展开CollapsingToolbarLayout。感谢 Tuấn Trần Anh 和这段代码:

coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator_layout);
appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();

behavior.setTopAndBottomOffset(0);
behavior.onNestedPreScroll(coordinatorLayout, appBarLayout, null, 0, 1, new int[2]);

更多信息在this thread

【讨论】:

  • 该错误已报告给官方错误跟踪器,标记为已分配,显然将在未来的更新中修复。 code.google.com/p/android/issues/…
  • 这并没有真正起作用,因为一旦用户滚动应用栏就会再次折叠。无论如何+1让我走上正确的道路。查看我的其他解决方案,了解我是如何解决这个问题的。
【解决方案3】:

编辑

仍然没有解决它,他们已经解决了另一个真正的问题。随着文字的改变。现在的诀窍是使用 ControllableAppLayout 来了解栏何时折叠或展开,因此您只需设置并清空标题 setTitle("")

你可以在这里找到我的实现https://gist.github.com/skimarxall/863585dcd7abde8f4153

问题: https://code.google.com/p/android/issues/detail?id=178138

【讨论】:

  • 对我来说不是,在我的情况下是和以前一样的行为。
  • 不,在 22.2.1 中没有解决:bug 仍然存在。
  • 对,我想他们会修复它。我更新我的评论
猜你喜欢
  • 1970-01-01
  • 2015-08-27
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2016-04-11
相关资源
最近更新 更多