【问题标题】:The property textIsSelectable does not work on the TextView属性 textIsSelectable 不适用于 TextView
【发布时间】:2020-02-29 07:08:48
【问题描述】:

我想要一个 TextView,以便用户可以从 TextView 中选择/复制文本。 TextView 是 TabLayout 中 Fragment 的一部分。 Fragment 的布局如下:

<?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 版本的多台设备上测试了该应用程序,但在这些设备上都没有文本是可选择的。

我有什么建议可以使 TextView 的文本可选择?

【问题讨论】:

  • 这确实很奇怪,因为设置 android:textIsSelectable="true" 应该可以工作。您是否在 java 类中的 textview 上设置了一些侦听器

标签: android android-fragments properties textview


【解决方案1】:

不知何故回到了这篇文章。查看您对问题所做的编辑,您的问题的原因似乎是这一行

textView.setMovementMethod(new ScrollingMovementMethod());

在您的 initializeTextView() 方法中。

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

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

textView.setTextIsSelectable(true);

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

【讨论】:

  • 删除行 textView.setMovementMethod(new ScrollingMovementMethod()); 成功了!
猜你喜欢
  • 2019-06-03
  • 1970-01-01
  • 2019-04-16
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多