La maggior parte dei dispositivi Android non ha una tastiera fisica. Invece, si basano su una tastiera virtuale o soft per accettare l'input dell'utente. Se sei interessato alla personalizzazione di Android, sapendo come creare una tastiera morbida e personalizzata, puoi portare il tuo hobby a un livello completamente nuovo.
Utilizzando l'SDK di Android, puoi creare rapidamente una tastiera virtuale con poche righe di codice sorprendentemente, perché l'SDK si prende cura di molte attività di basso livello, come riconoscere i tocchi chiave, disegnare la tastiera e stabilire connessioni tra la tastiera e campi di input.
In questo tutorial, imparerai come creare una tastiera virtuale perfettamente funzionante che possa fungere da tastiera predefinita del tuo dispositivo Android.
Se sei di fretta, dai un'occhiata a Android Keyboard Themes, una soluzione pronta all'uso di Envato Market.
L'app ti offre la flessibilità di scegliere uno dei 22 temi di tastiera incorporati o creare il tuo tema personalizzato.
Temi della tastiera AndroidOppure puoi assumere un libero professionista su Envato Studio. Basta navigare nella nostra sezione Mobile & Apps e sei sicuro di trovare un esperto che ti possa aiutare.
Sviluppatori di dispositivi mobili e app su Envato StudioSe preferisci costruire il tuo, continua a leggere per scoprire come.
Avrai bisogno del pacchetto Ectse ADT installato. Puoi scaricarlo dal sito web degli sviluppatori Android.
Accendi Eclipse e crea una nuova applicazione Android. Chiama questa applicazione, SimpleKeyboard. Assicurati di scegliere un nome di pacchetto univoco. Impostare l'SDK minimo richiesto su Android 2.2 e impostare l'SDK di destinazione su androide 4.4.
Questa app non avrà attività quindi deseleziona Crea attività e fare clic finire.
Una tastiera morbida è considerata come un Input Method Editor (IME) dal sistema operativo Android. Un IME è dichiarato come Servizio
nel AndroidManifest.xml che usa il BIND_INPUT_METHOD
permesso e risponde all'azione android.view.InputMethod
.
Aggiungi le seguenti linee al applicazione
tag del manifest:
Il servizio
il tag nel file manifest contiene a meta-dati
tag che fa riferimento a un file XML denominato method.xml. Senza questo file, il sistema operativo Android non riconoscerà il nostro Servizio
come servizio IME valido. Il file contiene dettagli sul metodo di input e i suoi sottotipi. Per la nostra tastiera, definiamo un singolo sottotipo per il it_IT locale. Crea la directory res / xml se non esiste e aggiungi il file method.xml ad esso. Il contenuto del file dovrebbe essere:
Le stringhe utilizzate da questa app sono definite nel file res / valori / strings.xml file. Avremo bisogno di tre stringhe:
Aggiorna il tuo strings.xml in modo che abbia il seguente contenuto:
SimpleKeyboard IME semplice Inglese (Stati Uniti)
Il layout della nostra tastiera contiene solo a KeyboardView
. Il layout_alignParentBottom
l'attributo è impostato su vero
in modo che la tastiera appaia nella parte inferiore dello schermo.
Crea un file chiamato res / layout / keyboard.xml e sostituire il suo contenuto con il seguente:
Il keyPreviewLayout
è il layout del pop-up di breve durata che compare ogni volta che viene premuto un tasto sulla tastiera. Contiene un singolo TextView
. Crea un file chiamato res / layout / preview.xml e aggiungi il seguente:
I dettagli dei tasti della tastiera e le loro posizioni sono specificati in un file XML. Ogni chiave ha i seguenti attributi:
keyLabel
: Questo attributo contiene il testo che viene visualizzato sulla chiave.codici
: Questo attributo contiene i valori unicode dei caratteri rappresentati dalla chiave.Ad esempio, per definire una chiave per la lettera UN, il codici
l'attributo dovrebbe avere il valore 97 e il keyLabel
attributo deve essere impostato su UN.
Se più di un codice è associato a un tasto, il carattere rappresentato dalla chiave dipenderà dal numero di tocchi ricevuti dalla chiave. Ad esempio, se una chiave ha i codici 63, 33, e 58:
Una chiave può anche avere alcuni attributi opzionali:
keyEdgeFlags
: Questo attributo può assumere il valore sinistra
o destra
. Questo attributo è solitamente aggiunto ai tasti più a sinistra e più a destra di una riga.keyWidth
: Questo attributo definisce la larghezza di una chiave. Di solito è definito come un valore percentuale.isRepeatable
: Se questo attributo è impostato su vero
, premendo a lungo il tasto si ripeterà l'azione del tasto più volte. Di solito è impostato su vero
per i tasti cancella e barra spaziatrice.I tasti di una tastiera sono raggruppati come righe. È buona norma limitare il numero di tasti su una riga a un massimo di dieci, con ogni chiave con una larghezza pari al 10% della tastiera. L'altezza dei tasti è impostata su 60dp in questo tutorial. Questo valore può essere regolato, ma i valori inferiori a 48DP non sono raccomandati La nostra tastiera avrà cinque file di chiavi.
Ora possiamo andare avanti e progettare la tastiera. Crea un nuovo file chiamato res / xml / qwerty.xml e sostituire il suo contenuto con il seguente:
Potresti aver notato che alcune chiavi hanno valori negativi per il codici
attributo. I valori negativi sono uguali alle costanti predefinite nel Tastiera
classe. Ad esempio, il valore -5
è uguale al valore di Keyboard.KEYCODE_DELETE
.
Servizio
ClasseCrea una nuova classe Java e chiamala SimpleIME.java. La classe dovrebbe estendersi InputMethodService
classe e implementare il OnKeyboardActionListener
interfaccia. Il OnKeyboardActionListener
l'interfaccia contiene i metodi che vengono chiamati quando i tasti della tastiera virtuale vengono toccati o premuti.
Il SimpleIME
la classe dovrebbe avere tre variabili membro:
KeyboardView
riferimento alla vista definita nel layoutTastiera
istanza che è assegnata al KeyboardView
booleano
dicendoci se il blocco maiuscole è abilitatoDopo aver dichiarato queste variabili e aggiunto i metodi di OnKeyboardActionListener
interfaccia, il SimpleIME
la classe dovrebbe assomigliare a questa:
public class SimpleIME estende InputMethodService implementa OnKeyboardActionListener private KeyboardView kv; tastiera della tastiera privata; private boolean caps = false; @Override public void onKey (int primaryCode, int [] keyCodes) @Override public void onPress (int primaryCode) @Override public void onRelease (int primaryCode) @Override public void onText (CharSequence text) @ Override public void swipeDown () @Override public void swipeLeft () @Override public void swipeRight () @Override public void swipeUp ()
Quando viene creata la tastiera, il onCreateInputView
il metodo è chiamato. Tutte le variabili membro del Servizio
può essere inizializzato qui. Aggiorna l'implementazione di onCreateInputView
metodo come mostrato di seguito:
@Override public Visualizza onCreateInputView () kv = (KeyboardView) getLayoutInflater (). Gonfia (R.layout.keyboard, null); keyboard = new Keyboard (questo, R.xml.qwerty); kv.setKeyboard (tastiera); kv.setOnKeyboardActionListener (questo); return kv;
Successivamente, creiamo un metodo che riproduce un suono quando viene premuto un tasto. Noi usiamo il AudioManager
classe per suonare i suoni. L'SDK di Android include alcuni effetti sonori predefiniti per le pressioni dei tasti e quelli utilizzati in playClick
metodo.
private void playClick (int keycode) AudioManager am = (AudioManager) getSystemService (AUDIO_SERVICE); switch (keyCode) case 32: am.playSoundEffect (AudioManager.FX_KEYPRESS_SPACEBAR); rompere; case Keyboard.KEYCODE_DONE: case 10: am.playSoundEffect (AudioManager.FX_KEYPRESS_RETURN); rompere; case Keyboard.KEYCODE_DELETE: am.playSoundEffect (AudioManager.FX_KEYPRESS_DELETE); rompere; default: am.playSoundEffect (AudioManager.FX_KEYPRESS_STANDARD);
Infine, aggiorna il OnKey
metodo in modo che la nostra app per tastiera possa comunicare con i campi di input (di solito Modifica il testo
viste) di altre applicazioni.
Il getCurrentInputConnection
il metodo viene utilizzato per ottenere una connessione al campo di input di un'altra applicazione. Una volta ottenuta la connessione, possiamo utilizzare i seguenti metodi:
commitText
per aggiungere uno o più caratteri al campo di inputdeleteSurroundingText
per eliminare uno o più caratteri del campo di inputsendKeyEvent
per inviare eventi, come KEYCODE_ENTER
, all'applicazione esternaOgni volta che un utente preme un tasto sulla tastiera virtuale, il OnKey
il metodo viene chiamato con il valore unicode della chiave come uno dei suoi parametri. Sulla base di questo valore, la tastiera esegue una delle seguenti azioni:
KEYCODE_DELETE
, un carattere a sinistra del cursore viene cancellato usando il deleteSurroundingText
metodo.KEYCODE_DONE
, un KEYCODE_ENTER
l'evento chiave è licenziato.KEYCODE_SHIFT
, il valore del caps
variabile viene cambiata e lo stato di shift della tastiera viene aggiornato usando il setShifted
metodo. La tastiera deve essere ridisegnata quando lo stato cambia in modo che le etichette dei tasti vengano aggiornate. Il invalidateAllKeys
il metodo è usato per ridisegnare tutte le chiavi.caps
la variabile è impostata su vero
, quindi il carattere viene convertito in maiuscolo.Aggiorna il OnKey
metodo in modo che assomigli a questo:
@Override onKey void pubblico (int primaryCode, int [] keyCodes) InputConnection ic = getCurrentInputConnection (); playClick (primaryCode); switch (primaryCode) case Keyboard.KEYCODE_DELETE: ic.deleteSurroundingText (1, 0); rompere; case Keyboard.KEYCODE_SHIFT: caps =! caps; keyboard.setShifted (caps); kv.invalidateAllKeys (); rompere; case Keyboard.KEYCODE_DONE: ic.sendKeyEvent (new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); rompere; default: char code = (char) primaryCode; if (Character.isLetter (code) && caps) code = Character.toUpperCase (code); ic.commitText (String.valueOf (code), 1);
La tastiera virtuale è ora pronta per essere testata. Compilalo ed eseguilo su un dispositivo Android. Questa app non ha un Attività
, il che significa che non verrà visualizzato nel programma di avvio. Per usarlo, dovrebbe prima essere attivato nel dispositivo impostazioni.
Dopo l'attivazione IME semplice, apri qualsiasi app che consenta l'inserimento di testo (ad esempio, qualsiasi app di messaggistica) e fai clic su uno dei suoi campi di input. Dovresti visualizzare l'icona di una tastiera nell'area delle notifiche. A seconda del dispositivo, è possibile fare clic su tale icona o trascinare verso il basso la barra di notifica e selezionare IME semplice come metodo di input. Ora dovresti essere in grado di digitare usando la tua nuova tastiera.
In questo tutorial, hai imparato come creare un'applicazione per tastiera personalizzata da zero. Per cambiare l'aspetto della tastiera, tutto ciò che devi fare è aggiungere uno stile extra al res / layout / keyboard.xml e res / layout / preview.xml File. Per cambiare la posizione dei tasti, aggiornare il res / xml / qwerty.xml file. Per aggiungere ulteriori funzionalità alla tastiera, consultare la documentazione per sviluppatori.