2012-02-27 47 views
7

我有一個EditText,我希望用戶能夠選擇一些文本並將一些基本格式應用於所選文本(粗體,斜體等)。不過,我仍然想要標準的複製,剪切,粘貼選項來顯示。我在Android文檔中的某個地方閱讀過,爲此,應該在EditText上調用setCustomSelectionActionModeCallback()並將其傳遞給ActionModeCallback(),這就是我所做的。這裏是我的代碼:溢出按鈕強制操作模式完成

在我的活動的onCreate()方法:

myEditText.setCustomSelectionActionModeCallback(new TextSelectionActionMode()); 

回調聲明:

private class TextSelectionActionMode implements ActionMode.Callback { 
    @Override 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
     return false; 
    } 

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     menu.add("Bold"); 
     return true; 
    } 

    @Override 
    public void onDestroyActionMode(ActionMode mode) { 
    } 

    @Override 
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
     return false; 
    } 
} 

我遇到的問題是,當我點擊溢出按鈕(訪問我的「粗體」菜單項),ActionMode立即關閉。如果我將它設置爲始終顯示爲一個動作,使用這個:

MenuItem bold = menu.add("Bold"); 
bold.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); 

它工作正常,我可以點擊它(儘管它顯然什麼都不做)。我在這裏錯過了什麼?

編輯:只是想補充一點,如果我真的膨脹一個菜單,而不是通過編程添加菜單項,我遇到了完全相同的問題。但是,如果我強迫它始終表現爲行動,問題就會消失。

回答

3

這是框架問題。如果textview接收到「focus changed」事件,則textview停止操作模式。當溢出彈出顯示時,textview未命中焦點。

+0

好的,你如何防止這個問題? – MBulava 2013-10-15 16:44:30

1

此問題已在Android 6.0中解決。但是,您應該在Android 6.0中使用here中描述的ActionMode.Callback2

對於Android 5.x及以下版本,我推薦此解決方法:向ToolbarActionBar添加一個按鈕,它記錄當前選擇,然後打開另一個上下文菜單。

this.inputText_selectionStart = inputText.getSelectionStart(); 
this.inputText_selectionEnd = inputText.getSelectionEnd(); 
registerForContextMenu(inputText); 
openContextMenu(inputText); 
unregisterForContextMenu(inputText);