我正在EditText
为传统的蒙古语制作垂直。我已经通过EditText
在一个旋转的ViewGroup
. 我需要创建一个完全自定义的上下文菜单,因为系统不支持垂直文本,并且在旋转时也不ViewGroup
旋转。所以我想完全禁用系统上下文菜单。
请注意,这与这些只是试图禁用复制/粘贴/等的问题不同:
- 如何禁用从/到 EditText 的复制/粘贴
- EditText:禁用文本选择处理程序单击事件上的粘贴/替换菜单弹出
- 如何在android EditText中禁用粘贴选项
- Android:如何在 Edittext 中完全禁用复制和粘贴功能
虽然我没有在模拟器中看到上下文菜单,但我在我的 Android 5.0.2 小米手机中看到了它。
我努力了:
我对黑客持开放态度,但我需要它能够跨设备始终如一地工作。Mark Murphy(一个 Commons Guy)回复了另一个试图做类似事情的用户:
我怀疑即使你想出了一个答案,它也不会跨设备工作。设备制造商倾向于为 EditText 推出他们自己的“上下文菜单”,从而挫败了开发人员将项目添加到该上下文菜单中的尝试。我的猜测是,试图阻止该上下文菜单会产生类似的结果。
我运气不好?
我现在唯一能想到的就是完全重写TextView
并EditText
从头开始(嗯,通过修改Android源代码)。我认识其他人做过类似的事情,但他的代码不是开源的。在迈出这一重要步骤之前,我想尝试在 Stack Overflow 上寻求更简单的解决方案。
更新:TextView
过去两天我一直在尝试修改源代码,它看起来像是一个 6 个月的项目。它是一堆相互关联的类。我需要另一种解决方案,但我没有想法。
MVCE
这是我能想到的重现问题的最简单方法。我的习惯没有什么必要的EditText
。布局有一个EditText
通过替换默认项目 Hello World's 制作的TextView
。我将 min API 更改为 11 以避免处理已弃用的方法。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.edit_text);
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { return false; }
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; }
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { return false; }
@Override
public void onDestroyActionMode(ActionMode actionMode) { }
});
}
}
当我单击光标句柄(但不是长按或双击)时,模拟器中的上下文菜单(运行 API 24)仍然显示。这是一张图片:
在我运行 Android 5.0 的小米 MIUI 手机上,我在所有情况下(光标句柄单击、长按、双击)都能获得上下文菜单。
更新
Aritra Roy 的解决方案在模拟器、他测试过的其他一些设备以及我的设备上运行。我接受了他的回答,因为它解决了我原来的问题。唯一的负面影响是文本选择也被禁用。