属性 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。
我想要一个 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。