2012-02-27 10 views
7

समाप्त करने के लिए एक्शन मोड को मजबूर करता है मेरे पास एक संपादन टेक्स्ट है और मैं चाहता हूं कि उपयोगकर्ता कुछ टेक्स्ट चुनने में सक्षम हो और चयनित टेक्स्ट (बोल्ड, इटैलिक, आदि) में कुछ मूल स्वरूपण लागू कर सके। मैं अभी भी मानक प्रतिलिपि, कट, पेस्ट विकल्प दिखाने के लिए चाहता हूं, हालांकि। मैंने एंड्रॉइड प्रलेखन में कहीं भी पढ़ा है कि ऐसा करने के लिए, आपको EditTustomSelectionActionModeCallback() को EditText पर कॉल करना चाहिए और इसे एक्शनमोड कॉलबैक() पास करना चाहिए, इसलिए मैंने यही किया।ओवरफ़्लो बटन बल

मेरी गतिविधि के 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; 
    } 
} 

समस्या मैं आ रही है कि जब मैं अतिप्रवाह बटन पर क्लिक करें (करने के लिए मेरे "बोल्ड" मेनू आइटम तक पहुंचें), एक्शनमोड तुरंत बंद हो जाता है। अगर मैं सेट यह हमेशा एक कार्रवाई के रूप में दिखाने के लिए, इस का उपयोग करते हुए:

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

यह ठीक काम करता है और मैं इस पर क्लिक कर सकते हैं (हालांकि यह स्पष्ट रूप से कुछ नहीं करता है)। मुझे यहां क्या समझ नहीं आ रहा है?

संपादित करें: बस जोड़ने के लिए ठीक उसी समस्या में है कि मैं चलाने अगर मैं वास्तव में के बजाय प्रोग्राम के रूप में मेनू आइटम जोड़ने की एक सूची बढ़ चाहता था। एक बार फिर, हालांकि, अगर मैं इसे हमेशा एक क्रिया के रूप में दिखाने के लिए मजबूर करता हूं तो समस्या दूर हो जाती है।

उत्तर

3

यह ढांचागत मुद्दा है। यदि टेक्स्टव्यू 'फोकस बदल गया' ईवेंट प्राप्त करता है, तो टेक्स्टव्यू एक्शन मोड को रोकता है। जब अतिप्रवाह पॉपअप दिखाया जाता है, तो टेक्स्टव्यू मिस फोकस।

+0

ठीक है तो आप समस्या को कैसे रोकते हैं? – MBulava

1

यह समस्या एंड्रॉइड 6.0 में हल हो गई है। हालांकि आपको एंड्रॉइड 6.0 में here वर्णित ActionMode.Callback2 का उपयोग करना चाहिए।

एंड्रॉइड 5.x और नीचे के लिए, मैं इस वर्कअराउंड की अनुशंसा करता हूं: Toolbar या ActionBar पर एक बटन जोड़ें जो वर्तमान चयन रिकॉर्ड करता है और फिर एक और संदर्भ मेनू खोलता है।

this.inputText_selectionStart = inputText.getSelectionStart(); 
this.inputText_selectionEnd = inputText.getSelectionEnd(); 
registerForContextMenu(inputText); 
openContextMenu(inputText); 
unregisterForContextMenu(inputText); 
संबंधित मुद्दे