gpt4 book ai didi

android - 禁用 EditText 上下文菜单

转载 作者:IT老高 更新时间:2023-10-28 21:49:15 30 4
gpt4 key购买 nike

我正在为传统的蒙古语制作一个垂直的 EditText。我已经通过在旋转的 ViewGroup 中嵌入稍微修改的 EditText 来成功实现它。我需要创建一个完全自定义的上下文菜单,因为系统不支持垂直文本,并且在旋转 ViewGroup 时也不会旋转。所以我想完全禁用系统上下文菜单。

请注意,这与这些只是试图禁用复制/粘贴/等的问题不同:

虽然我没有在模拟器中看到上下文菜单,但我在我的 Android 5.0.2 小米手机中看到了它。

我试过了:

我对黑客持开放态度,但我需要它在不同设备上始终如一地工作。马克·墨菲(Commons Guy)wrote一段时间后回复另一个尝试做类似事情的用户:

I suspect that even if you come up with an answer, it will not work across devices. Device manufacturers have had a tendency to roll their own "context menu" for EditText, defeating developers' attempts to add items into that context menu. My guess is that trying to block that context menu will have similar results.

我运气不好?

我现在唯一能想到的就是从头开始完全重写TextViewEditText(嗯,通过修改Android源码)。我认识其他人做过类似的事情,但他的代码不是开源的。在迈出这一重要步骤之前,我想尝试在 Stack Overflow 上寻求更简单的解决方案。

更新:过去两天我一直在尝试修改 TextView 源代码,它看起来像是一个 6 个月的项目。它是一堆相互关联的类。我需要另一种解决方案,但我没有想法。

MVCE

这是我能想到的重现问题的最简单方法。我的自定义 EditText 没有任何必要。该布局有一个单独的 EditText,它是通过替换默认项目 Hello World 的 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)仍然显示。这是一张图片:

enter image description here

在我运行 Android 5.0 的小米 MIUI 手机上,我在所有情况下(光标句柄单击、长按、双击)都会获得上下文菜单。

更新

Aritra Roy 的解决方案可以在模拟器、他测试过的其他一些设备以及我的设备上运行。我接受了他的回答,因为它解决了我原来的问题。唯一的负面影响是文本选择也被禁用​​。

最佳答案

解决方法很简单

public class MainActivity extends AppCompatActivity {

EditText et_0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

et_0 = findViewById(R.id.et_0);

et_0.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
//to keep the text selection capability available ( selection cursor)
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
//to prevent the menu from appearing
menu.clear();
return false;
}

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

@Override
public void onDestroyActionMode(ActionMode mode) {

}
});
}
}

enter image description here

关于android - 禁用 EditText 上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41673185/

30 4 0