問題描述
我正在為傳統的蒙古語制作一個垂直的 EditText
.我已經通過在旋轉的 ViewGroup
中嵌入稍微修改的 EditText
來成功實現它.我需要創建一個完全自定義的上下文菜單,因為系統不支持垂直文本,并且在旋轉 ViewGroup
時也不會旋轉.所以我想完全禁用系統上下文菜單.
請注意,這與這些只是試圖禁用復制/粘貼/等的問題不同:
在我運行 Android 5.0 的小米 MIUI 手機上,我在所有情況下(光標句柄單擊、長按、雙擊)都會獲得上下文菜單.
更新
Aritra Roy 的解決方案可以在模擬器、他測試過的其他一些設備以及我的設備上運行.我接受了他的回答,因為它解決了我原來的問題.唯一的負面影響是文本選擇也被禁用??.
解決方案解決方案很簡單
公共類 MainActivity 擴展 AppCompatActivity {編輯文本 et_0;@覆蓋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() {@覆蓋public boolean onCreateActionMode(ActionMode mode, Menu menu) {//保持文本選擇功能可用(選擇光標)返回真;}@覆蓋public boolean onPrepareActionMode(ActionMode mode, Menu menu) {//防止菜單出現menu.clear();返回假;}@覆蓋public boolean onActionItemClicked(ActionMode mode, MenuItem item) {返回假;}@覆蓋公共無效 onDestroyActionMode(ActionMode 模式) {}});}}
I am making a vertical
EditText
for traditional Mongolian. I have successfully implemented it by embedding a slightly modifiedEditText
inside of a rotatedViewGroup
. I need to create a completely custom context menu because the system one does not support vertical text and is also not rotated when theViewGroup
is rotated. So I want to disable the system context menu altogether.Note that this is different than these questions that are just trying to disable copy/paste/etc.:
- How to disable copy/paste from/to EditText
- EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event
- how to disable paste option in android EditText
- Android: How to TOTALLY disable copy and paste function in Edittext
Although I don't get the context menu appearing in the simulator, I get it appearing in my Android 5.0.2 Xiaomi phone.
I have tried:
- the
setCustomSelectionActionModeCallback
"solution" - the
setLongClickable(false);
"solution" - the
onTouchEvent
"solution"
I'm open to hacks but I need it to consistently work across devices. Mark Murphy (a Commons Guy) wrote some time back in reply to another user trying to do something similar:
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.
Am I out of luck?
The only thing I can think of now is to completely rewrite
TextView
andEditText
from scratch (well, by modifying the Android source). I know someone else who did something similar, but his code isn't open source. Before I take this major step, I want to try asking for a simpler solution here on Stack Overflow.Update: I've been trying modify the
TextView
source code for the past two days and it looks like a 6 month project. It is a mass of interrelated classes. I need another solution, but I am out of ideas.MVCE
This is the simplest way I could think of to recreate the problem. There is nothing necessary from my custom
EditText
. The layout has a singleEditText
made by replacing the default project Hello World'sTextView
. I changed the min API to 11 to avoid dealing with deprecated methods.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) { } }); } }
The context menu in the simulator (running API 24) still shows when I click on the cursor handle (but not on a long click or double click). Here is an image:
On my Xiaomi MIUI phone running Android 5.0, I get the context menu in all situations (cursor handle click, long click, double click).
Update
Aritra Roy's solution is working in the simulator, on some other devices that he has tested, and on my device. I have accepted his answer because it solves my original problem. The only negative side effect is that text selection is also disabled.
解決方案the solution is very simple
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) { } }); } }
這篇關于禁用 EditText 上下文菜單的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!
【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!