我正在为传统蒙古文制作一个垂直的
请注意,这与仅尝试禁用复制/粘贴等的问题不同。
更新:我已经试图修改
MVCE
这是我能想到的最简单的重新创建问题的方法。与我的自定义
模拟器中的上下文菜单(运行API 24)仍然会在我点击光标手柄时显示(但不是长按或双击)。这是一张图片: 在我的小米MIUI手机上运行Android 5.0,我可以在所有情况下(光标处理单击、长按、双击)获得上下文菜单。
更新
Aritra Roy的解决方案在模拟器中、他测试过的其他设备上以及我的设备上都有效。我已经接受了他的答案,因为它解决了我的原始问题。唯一的负面影响是文本选择也被禁用了。
EditText
。通过将略微修改过的EditText
嵌入旋转的ViewGroup
中,我已经成功地实现了它。我需要创建完全自定义的上下文菜单,因为系统菜单不支持垂直文本,并且在ViewGroup
旋转时也不会旋转。因此,我想彻底禁用系统上下文菜单。请注意,这与仅尝试禁用复制/粘贴等的问题不同。
- 如何禁用EditText的复制/粘贴功能
- EditText:在文本选择处理程序单击事件上禁用粘贴/替换菜单弹出窗口
- 如何在Android EditText中禁用粘贴选项
- Android:如何完全禁用Edittext中的复制和粘贴功能
虽然我没有在模拟器中看到上下文菜单,但我在我的Android 5.0.2小米手机上看到了它。
我已经尝试过:
- 使用
setCustomSelectionActionModeCallback
方法的“解决方案” - 使用
setLongClickable(false);
方法的“解决方案” onTouchEvent
方法的“解决方案”
我愿意尝试一些hack方法,但我需要它在各种设备上都能正常工作。Mark Murphy (a Commons Guy) 曾经写道回复另一个尝试做类似事情的用户:
我怀疑即使你找到了答案,它也不会在所有设备上都起作用。设备制造商往往会为EditText自己定制“上下文菜单”,从而破坏开发者添加菜单项的尝试。我猜想,尝试阻止那个上下文菜单将会有类似的结果。
那我是不是没有办法了?
我现在能想到的唯一办法就是彻底重写TextView
和EditText
(通过修改Android源码)。我知道有人做过类似的事情,但他的代码不是开源的。在采取这个重要步骤之前,我想在Stack Overflow上尝试寻求更简单的解决方案。更新:我已经试图修改
TextView
源代码两天了,看起来像是一个6个月的项目。它是一堆相互关联的类。我需要另一个解决方案,但我已经没有任何想法了。MVCE
这是我能想到的最简单的重新创建问题的方法。与我的自定义
EditText
无关。布局有一个由默认项目Hello World的TextView
替换而成的单个EditText
。我将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)仍然会在我点击光标手柄时显示(但不是长按或双击)。这是一张图片: 在我的小米MIUI手机上运行Android 5.0,我可以在所有情况下(光标处理单击、长按、双击)获得上下文菜单。
更新
Aritra Roy的解决方案在模拟器中、他测试过的其他设备上以及我的设备上都有效。我已经接受了他的答案,因为它解决了我的原始问题。唯一的负面影响是文本选择也被禁用了。
EditText
代码在GitHub上。 - Suragch