首页 > 解决方案 > 用于TextView的Android TextView空白区域长按上下文菜单,而不是文本选择菜单

问题描述

似乎在TextView启用了文本选择的 a 上,如果我长按空白区域,则会选择最近的单词并显示文本选择上下文菜单。是否可以更改它,并为TextView自身显示不同的上下文菜单,而不选择最近的单词?

我的意思是:长按某个单词会显示所选单词的上下文菜单(例如“复制/剪切/全选”),长按空白区域会显示上下文菜单TextView(例如“重新加载页面”)。


PS:人们似乎不理解“空白空间”。用黄线标记的区域就是我的意思。

在此处输入图像描述

这是代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <TextView
                    android:id="@+id/textview1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#FF0000"
                    android:text="@string/large_text"
                    android:textAppearance="@style/TextAppearance.AppCompat.Large"
                    android:textColor="@color/black"
                    android:textIsSelectable="true" />
    </ScrollView>
</RelativeLayout>

标签: androidtextviewandroid-widget

解决方案


你可以用TextView+来做View,这是一个例子:

XML:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="100dp">

    <View
        android:id="@+id/emptyArea"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="Some text"
        android:textColor="@color/black"
        android:textIsSelectable="true"
        android:textSize="20sp"
        android:textStyle="bold" />

</RelativeLayout>

爪哇:

 findViewById(R.id.emptyArea).setOnLongClickListener(v -> {
            Toast.makeText(getApplicationContext(), "On emptyArea clicked", Toast.LENGTH_SHORT).show();
            return true;
        });

或者您可以使用setCustomSelectionActionModeCallback()

TextView textView = findViewById(R.id.text);
        textView.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {

                return false;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {

            }
        });

请注意,由于某种原因,setCustomSelectionActionModeCallback不适用于 MIUI(小米设备)。


推荐阅读