2012-02-27 11 views
7

Ho un EditText e voglio che l'utente sia in grado di selezionare del testo e applicare alcune formattazioni di base al testo selezionato (grassetto, corsivo, ecc.). Voglio comunque la copia standard, tagliare, incollare le opzioni per mostrare, però. Ho letto da qualche parte nella documentazione di Android che per farlo, dovresti chiamare setCustomSelectionActionModeCallback() su EditText e passargli un ActionModeCallback(), quindi è quello che ho fatto. Qui è il mio codice:Il pulsante di overflow forza la Modalità azione per finire

In onCreate di mia attività() metodo: dichiarazione

myEditText.setCustomSelectionActionModeCallback(new TextSelectionActionMode()); 

richiamata:

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; 
    } 
} 

Il problema che sto avendo è che quando si fa clic sul pulsante di overflow (per accedere alla voce del menu "Grassetto"), l'ActionMode si chiude immediatamente. Se ho impostato per mostrare sempre come un'azione, utilizzando questo:

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

Funziona benissimo e posso cliccare su di esso (anche se, ovviamente, non fa niente). Cosa mi manca qui?

Modifica: Volevo solo aggiungere che mi imbatto nello stesso identico problema se effettivamente gonfio un menu invece di aggiungere voci di menu a livello di codice. Ancora una volta, però, il problema scompare se lo costringo a mostrare sempre un'azione.

risposta

3

È un problema di framework. Se textview riceve l'evento 'focus modificato', quindi textview interrompe la modalità di azione. Quando viene visualizzato il popup di overflow, manca la messa a fuoco del testo.

+0

Ok, quindi come si impedisce il problema? – MBulava

1

Questo problema è stato risolto in Android 6.0. Tuttavia dovresti usare ActionMode.Callback2 come descritto here in Android 6.0.

Per Android 5.xe versioni precedenti, consigliamo questa soluzione alternativa: aggiungere un pulsante a Toolbar o ActionBar che registra la selezione corrente e quindi apre un altro menu di scelta rapida.

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