使用选择时,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 的波纹效果卡在长按上的主要内容,如果未能解决你的问题,请参考以下文章

如何在长按或点击时获得点击文本?

imageview 上的波纹效果

如何给Imageview 设置水波纹效果

BranchIO Universal Link iOS 数据仅在长按并选择打开时有效

Android 4.0 长按上的PhoneGap html5 应用

允许 UIScrollView 在长按处于活动状态时通过第二次触摸滚动