【问题标题】:Setting 'textIsSelectable' on (larger) Textview makes RecyclerView scroll to the start of the TextView在(更大的)Textview 上设置“textIsSelectable”会使 RecyclerView 滚动到 TextView 的开头
【发布时间】:2019-11-25 10:40:01
【问题描述】:

该应用有一个屏幕,其中包含较大的 TextView 的 RecyclerView。每个 Textview 可以包含 2 - 100 行。是的,对于应用程序来说,这是一个很好的解决方案。

用户在 TextView 上有许多选项:singleTap、doubleTap 等。用户可以例如选择“文本选择”选项。然后执行以下代码:

aTextview.setOnTouchListener(null); // preventing the singletap, double tap action, works fine
aTextview.setFocusable(true);
aTextview.setLongClickable(true);
aTextview.setTextIsSelectable(true);

后一条语句将使 RecyclerView 滚动到当前文本视图的开始/顶部。假设用户要在当前textview的第55行选择单词,当开始选择文本时,recyclerview会在屏幕顶部滚动当前textview的第0行。这真的很烦人,因为这样用户将不得不再次搜索文本(在第 55 行)以进行选择(以及复制、粘贴等)。

当我删除“setTextIsSelectable”语句时,没有滚动。

如何防止“setTextIsSelectable”开始滚动到文本视图的开头?

更新:解决方案是使用recyclerView。setLayoutFrozen(true); ...然后解冻recyclerView。这种解决方案的缺点是 textSelection 不能超出屏幕,因为没有滚动;-)

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    解决方案 1:首先将焦点移到另一个 (!) 项目。然后执行 aTextview.setTextIsSelectable(true)。为什么 - 更改内容会重新布局,从而移动到顶部。

    怎么样? focusDistractorView.requestFocus();

    这种虚拟焦点干扰器的一个例子是:

    <LinearLayout
        android:id="@+id/move_focus_here_editable"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_width="0px"
        android:layout_height="0px"
        android:orientation="vertical"/>
    

    您可以在操作后恢复焦点。

    方案二是使用recyclerView.setLayoutFrozen(true); ...然后解冻recyclerView。这种方案的缺点是 textSelection 不能超出屏幕,因为没有滚动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 2019-04-16
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多