Crea una tastiera personalizzata su Android

Cosa starai creando

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.

Opzione Premium

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 Android

Oppure 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 Studio

Se preferisci costruire il tuo, continua a leggere per scoprire come.

1. Prerequisiti

Avrai bisogno del pacchetto Ectse ADT installato. Puoi scaricarlo dal sito web degli sviluppatori Android.

2. Crea un nuovo progetto

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.

3. Modifica il manifest

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:

     

4. Creare method.xml

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:

   

5. Modifica strings.xml

Le stringhe utilizzate da questa app sono definite nel file res / valori / strings.xml file. Avremo bisogno di tre stringhe:

  • il nome dell'app
  • l'etichetta dell'IME
  • l'etichetta del sottotipo IME

Aggiorna il tuo strings.xml in modo che abbia il seguente contenuto:

 SimpleKeyboard IME semplice Inglese (Stati Uniti) 

6. Definire il layout della tastiera

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:

  

6. Definire i tasti della tastiera

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:

  • un singolo tocco sui risultati chiave nel personaggio ?
  • due colpetti in rapida successione determinano il carattere !
  • tre rubinetti in rapida successione determinano il carattere :

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.

7. Creare a Servizio Classe

Crea 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:

  • un KeyboardView riferimento alla vista definita nel layout
  • un Tastiera istanza che è assegnata al KeyboardView
  • un booleano dicendoci se il blocco maiuscole è abilitato

Dopo 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 input
  • deleteSurroundingText per eliminare uno o più caratteri del campo di input
  • sendKeyEvent per inviare eventi, come KEYCODE_ENTER, all'applicazione esterna

Ogni 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:

  • Se il codice è KEYCODE_DELETE, un carattere a sinistra del cursore viene cancellato usando il deleteSurroundingText metodo.
  • Se il codice è KEYCODE_DONE, un KEYCODE_ENTER l'evento chiave è licenziato.
  • Se il codice è 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.
  • Per tutti gli altri codici, il codice viene semplicemente convertito in un carattere e inviato al campo di input. Se il codice rappresenta una lettera dell'alfabeto e il 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); 

8. Test della tastiera

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.

Conclusione

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.