属性 textIsSelectable 在 TextView 上不起作用

The property textIsSelectable does not work on the TextView

我想要一个 TextView,以便用户可以 select/copy 来自 TextView 的文本。 TextView 是 TabLayout 中片段的一部分。片段具有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="2">

    <TextView
        android:id="@+id/textview_translator_text"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@drawable/background_default"
        android:textIsSelectable="true"
        android:textSize="@dimen/edittext_textsize_translator"
        android:padding="@dimen/edittext_padding_translator"
        android:scrollbars="vertical"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/view_height_spacing" />

    <EditText
        android:importantForAutofill="no"
        android:inputType="text"
        android:id="@+id/edittext_translator_text"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@drawable/background_default"
        android:hint="@string/type_text"
        android:gravity="top"
        android:textSize="@dimen/edittext_textsize_translator"
        android:padding="@dimen/edittext_padding_translator"
        android:scrollbars="vertical"/>

</LinearLayout>

而对应的Java代码如下:

public class FragmentText extends Fragment {

    private TextView textView;

    private View rootView;

    private TextTranslator textTranslator;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_text, container, false);

        textTranslator = new TextTranslator();

        initializeTextView();
        initializeEditText();

        return rootView;
    }

    private void initializeTextView() {
        textView = rootView.findViewById(R.id.textview_translator_text);

        textView.setMovementMethod(new ScrollingMovementMethod());
    }

    private void initializeEditText() {
        EditText editText = rootView.findViewById(R.id.edittext_translator_text);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                // currently not used
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                String textInBinary = textTranslator.getBinarySequence(charSequence.toString());

                textView.setText(textInBinary);
            }

            @Override
            public void afterTextChanged(Editable editable) {
                // currently not used
            }
        });
    }
}

我希望 TextView 的文本是可选的(因为我使用的是 属性 textIsSelectable)。但是,出于某种原因,该文本 可选。

我已经在具有不同 Android 版本的多个设备上测试了该应用程序,并且在这些设备的 none 上可以选择文本。

关于如何可以使 TextView 的文本可选择的任何建议?

不知何故回过头来post。查看您对问题所做的编辑,问题的原因似乎是这一行

textView.setMovementMethod(new ScrollingMovementMethod());

在您的 initializeTextView() 方法中。

简单来说,它会用 android:textIsSelectable="true" 覆盖您在 xml 中设置的内容。您可以阅读 以了解有关它是如何导致问题的更多信息。

最简单的解决方案是从代码中删除滚动移动方法并在 xml 中使用 android:textIsSelectable="true" 或通过编程方式将 TextView 设置为可选

textView.setTextIsSelectable(true);

因为它似乎也将 focusable、focusableInTouchMode、longClickable 等其他一些属性的值设置为 true。