android - 用于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>
解决方案
你可以用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(小米设备)。
推荐阅读
- image - 如何将图像制作为切换按钮以在本机反应中显示两个不同的图像
- ibm-midrange - 如果没有程序更改,是否有任何方法可以处理“接收器太小而无法容纳结果”问题
- sql - SQL查询从多条记录中获取结果到一行
- typescript - TypeScript,详尽性检查无法正常工作
- reactjs - react.js 模块中的多个导出默认值
- java - 使用 `==` 比较字符串
- android - Android 通知 - 小图标在某些设备上不起作用
- java - 合并几乎相等的数据列表的值
- gnuplot - gnuplot x 轴延伸超过轮廓边界
- sql - 如果少于 N 行,则为每个类别选择前 N 个无排序