“android:textIsSelectable =”true“不适用于RecyclerView中的TextView

我知道在XML中为TextView设置android:textIsSelectable="true"将显示原生文本selectpopup窗口,我一直在我的应用程序中使用它。 但是当我尝试在附加到RecyclerView的视图中设置相同的属性时,我发现它不再工作。 每当我尝试select文本时出现以下日志 –

 TextView: TextView does not support text selection. Action mode cancelled. 

而我不知道为什么? 为什么它在其他屏幕上工作,而不是与RecyclerView 。 我阅读多个职位 –

TextView与android:textIsSelectable =“true”不能在listview中工作

textview textIsSelectable =“true”在Listview中不起作用

android:TextIsSelectable =“true”为ListView内的TextView不起作用

但后来我遇到这个post –

Android:“TextView不支持文字select,动作模式取消”

@hungkk的回复为我工作。 他的解决schemebuild议将TextView宽度从match_parent更改为wrap_content

我知道我可以做到这一点,但我的问题是如何解决这个问题,因为它看起来很奇怪。 而且,如果我想保持宽度为match_parent ,解决scheme是什么。

任何投入是受欢迎的。

Solutions Collecting From Web of "“android:textIsSelectable =”true“不适用于RecyclerView中的TextView"

如果您在recyclerview或listview中添加了android:descendantFocusability =“blocksDescendants”,请将其删除。 并检查后

在recyclerview的main-parent布局中添加属性

android:descendantFocusability="beforeDescendants"

然后在rowitem布局的TextView中添加

 android:textIsSelectable="true" 

添加您的RecyclerView适配器:

 public ViewHolder(View itemView) { super(itemView); txtDate = (TextView) itemView.findViewById(R.id.txtDate); txtDate.setTextIsSelectable(true); } 

它为我工作..

似乎有很多有这个问题,并表明它可能是Android代码中的错误,但我没有问题。 这对我来说既适用于OnClickListener() ,也适用于本地selectpopup窗口。 (testingKitKat 4.4,棒棒糖5.1和牛轧糖7.1)

在适配器中

 class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView textView; ImageView imageView; MyViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.my_text_view); imageView = (ImageView) itemView.findViewById(R.id.my_image_view); itemView.setOnClickListener(this); textView.setOnClickListener(this); } @Override public void onClick(View view) { // this shows 'my_text_view' when the text is clicked or // 'my_item' if elsewhere is clicked Log.d(TAG, "view = " + view.toString()); switch (view.getId()) { case R.id.my_item: break; case R.id.my_text_view: break; } } } 

和我的项目布局

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/my_item" > <ImageView android:layout_width="40dp" android:layout_height="40dp" android:background="@color/colorPrimary" android:id="@+id/my_image_view" /> <!-- this works for me with either "match_parent" or "wrap_content" for width --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:text="My text view" android:textIsSelectable="true" android:id="@+id/my_text_view" /> </LinearLayout>