2013-01-21 13 views
9

Sto cercando una soluzione per disabilitare il menu di modifica della stampa lunga (copia/incolla) e anche la funzione di selezione di tutti i due tasti per una finestra di modifica. Ho letto alcune soluzioni su questo argomento in modo simile, tuttavia, ho bisogno di fare un passo avanti.Android - impedisci edittext copia/incolla e tocca due volte seleziona tutto

Per questa applicazione ho l'obbligo di impedire all'utente di utilizzare le funzioni di copia/incolla sulla mia app e ho bisogno di un modo per disabilitare questa funzionalità che funzionerà su API 2.3 e quando usato su un tablet più recente. Sto testando con un dispositivo telefonico NexusOne e un tablet Galaxy. (minSDK è 8, l'obiettivo è 10)

Attualmente sto usando questo (ad esempio): edittextPassword.setLongClickable (false); -disabilizza il menu di modifica popup, ottimo!

Questo metodo funziona sul dispositivo telefonico per impedire il popup del menu di modifica. Sul tablet, anche questo viene disabilitato dall'azione a pressione prolungata. Il tablet ha tuttavia nuove funzionalità di un doppio tocco che selezionerà-tutto il testo e aprirà il menu di modifica. C'è un modo per un'API più vecchia di annullare/trap/disabilitare una nuova funzionalità API o impedire il gesto del doppio tocco?


Aggiornamento: Usando una combinazione di setLongClickable (false) e setOnTouchListener collegato ad un GestureDetector (grazie Nikola per il suggerimento) sono in grado di intrappolare/annullare il doppio click e lungo fare clic su Modifica menu apertura.

La prossima parte da capire è questa ... sui telefoni Samsung (Galaxy S, non sono sicuro di altri dispositivi al momento), quando si tocca un campo, si ottiene un cursore e un pulsante del puntatore del cursore mobile (nome proprio ??). Fare clic su questo pulsante del puntatore è un altro metodo per aprire il menu di modifica. Qualcuno sa come disabilitare questo? Il mio unico rimedio è quello di cancellare gli Appunti su BeforeTextChanges e AfterTextChanges usando TextWatcher. Ciò garantisce che anche se si accede al menu Copia/Incolla, gli appunti vengono cancellati e non c'è nulla da incollare.

+0

"Attualmente sto usando questo: edittextPassword.setLongClickable (false); -disables il menu di modifica popup, Great!"- Sarò sorpreso se questo funziona su tutti i dispositivi .. Più di un produttore ha modificato il funzionamento di" EditText "rispetto a questi tipi di operazioni – CommonsWare

+4

Considerate anche i vostri utenti.Io sono costantemente frustrato da EditTexts per le password che fanno non consentire l'incollatura poiché uso password complesse generate casualmente (Dashlane) per tutti i miei account e digitarle è così difficile che di solito devo cambiare la password in qualcosa di semplice, inserirla, quindi cambiare la password in una forte. Fa schifo ... – Simon

+1

Usa GestureListener e ritorna true ogni volta che viene premuto due volte/a lungo.Permette di evitare che il sistema reagisca di conseguenza se l'evento non è stato gestito –

risposta

1

Per quanto riguarda il "pulsante del puntatore del cursore mobile", chiamato cursor controller, or handle, e il menu di scelta rapida che viene visualizzato quando viene fatto clic, sì, c'è un modo per disabilitarlo. Sto assumendo che ti riferisci a questo:

Text selection handle with paste menu

Oltre al setLongClickable (false) e il codice setOnTouchListener, la correzione consiste nel prevenire PASTE menù/SOSTITUIRE di apparire nel metodo della show() (non documentato) android.widget.Editor classe. Prima che venga visualizzato il menu, viene effettuato un controllo su if (!canPaste && !canSuggest) return;. I due metodi che vengono utilizzati come base per impostare queste variabili sono entrambe nella classe EditText:

Una risposta più completa è available here.

Come menziona @CommonsWare, i singoli produttori di dispositivi potrebbero aver modificato il comportamento AOSP predefinito del controllo EditText, pertanto è necessario eseguire il test.

Problemi correlati