使用选择时,TextView 的波纹效果卡在长按上
Posted
技术标签:
【中文标题】使用选择时,TextView 的波纹效果卡在长按上【英文标题】:Ripple effect of TextView gets stuck on long click, when selection is used 【发布时间】:2021-09-30 18:08:16 【问题描述】:我最近重构了我的应用程序以使用喷气背包导航。在我的 MainActivity 上,我有一个 ViewPager,其中包含 3 个片段,每个片段有 1 个 recyclerview。因此,我将 ViewPager 从 Activity 移到了新的 Fragment。就功能本身而言,一切正常,但出现了一个真正困扰我的新问题:当我在 recyclerview 上长按选择一个项目时,涟漪效应会卡住并停留在那里,就好像我还在按下项目,我没有。这是所选项目的图片。可以看出,波纹效果在 TextView 上保持活跃。
当我取消选择项目时,涟漪效果也保持活跃:
选择本身由 android SelectionTracker 处理。 TextView 的背景设置为background="?android:attr/selectableItemBackground"
。整个 ViewItem 的背景设置为 android:background="@drawable/bg_multi_selection
,而 bg_multi_selection 文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/secondaryLightColor" android:state_activated="true" />
<item android:drawable="@android:color/transparent" />
</selector>
这可能是什么问题?这特别奇怪,因为当 ViewPager 及其片段包含在 Activity 中而不是片段中时,问题不存在。有关如何解决此问题的任何建议?
【问题讨论】:
【参考方案1】:我找到了适合我的解决方案。所以对于任何感兴趣的人,我做了以下事情:
在 onBindViewHolder() 方法的 recyclerviewadapter 中,我检查元素是否被选中,并以编程方式另外设置 TextView 的背景颜色和背景资源。
if (elementIsSelected)
viewHolder.viewBinding.itemTextView.setBackgroundColor(context.resources.getColor(R.color.transparent, context.theme))
else
val outValue = TypedValue()
context.theme.resolveAttribute(android.R.attr.selectableItemBackground, outValue, true)
viewHolder.viewBinding.itemTextView.setBackgroundResource(outValue.resourceId)
而我将颜色定义为透明,即#00000000
奇怪的是,这个问题只发生在某些设备上,所以我不确定“真正的”问题是否存在于其他地方,但至少我是这样解决的。希望这可能对其他人有所帮助。
【讨论】:
以上是关于使用选择时,TextView 的波纹效果卡在长按上的主要内容,如果未能解决你的问题,请参考以下文章
BranchIO Universal Link iOS 数据仅在长按并选择打开时有效