Opprett et egendefinert tastatur på Android

Hva du skal skape

De fleste Android-enheter har ikke et fysisk tastatur. I stedet stoler de på et virtuelt eller mykt tastatur for å godta brukerinngang. Hvis du er i Android-tilpassing, vet du hvordan du bygger et tilpasset, mykt tastatur, kan hobbyen din til et helt nytt nivå.

Ved å bruke Android SDK, kan du raskt lage et mykt tastatur med overraskende få kodelinjer, fordi SDK tar vare på mange oppgaver på lavt nivå, for eksempel å gjenkjenne nøkkeltaster, tegne tastaturet og etablere tilkoblinger mellom tastaturet og Inndatafelt.
I denne opplæringen lærer du hvordan du lager et fullt funksjonelt mykt tastatur som kan fungere som Android-enhetens standard tastatur.

Premium-alternativ

Hvis du har det travelt, sjekk ut Android Keyboard Themes, en klar til bruk-løsning fra Envato Market. 

Appen gir deg fleksibiliteten til å velge et av de 22 innebygde tastaturtemaene eller lage ditt eget tilpassede tema.

Android Tastatur Temaer

Eller du kan ansette en freelancer på Envato Studio. Bare bla gjennom delen Mobile & Apps, og du er sikker på å finne en ekspert som kan hjelpe deg.

Mobil og apputviklere på Envato Studio

Hvis du foretrekker å bygge din egen, les videre for å finne ut hvordan.

1. Forutsetninger

Du trenger Eclipse ADT Bundle installert. Du kan laste den ned fra Android Developer-nettstedet.

2. Lag et nytt prosjekt

Brann opp Eclipse og opprett et nytt Android-program. Ring dette programmet, SimpleKeyboard. Pass på at du velger et unikt pakkenavn. Angi minimumskrav til SDK til Android 2.2 og sett mål SDK til Android 4.4.

Denne appen har ingen aktiviteter så avvelg Opprett aktivitet og klikk Bli ferdig.

3. Rediger manifestet

Et mykt tastatur betraktes som en Input Method Editor (IME) av Android-operativsystemet. En IME er erklært som en Service i AndroidManifest.xml som bruker BIND_INPUT_METHOD tillatelse, og reagerer på handlingen android.view.InputMethod.

Legg til følgende linjer i applikasjon manifestets merke:

     

4. Lag method.xml

De service tag i manifestfilen inneholder a meta-dataene tag som refererer til en XML-fil som heter method.xml. Uten denne filen vil Android-operativsystemet ikke gjenkjenne vår Service som en gyldig IME-tjeneste. Filen inneholder detaljer om inngangsmetoden og dens undertyper. For tastaturet definerer vi en enkelt undertype for no locale. Lag katalogen res / xml hvis den ikke eksisterer, og legg til filen method.xml til det. Innholdet i filen skal være:

   

5. Rediger strings.xml

Strengene som denne appen bruker, er definert i res / verdier / strings.xml fil. Vi kommer til å trenge tre strenger:

  • navnet på appen
  • etiketten til IME
  • Etiketten på IMEs undertype

Oppdater din strings.xml slik at den har følgende innhold:

 SimpleKeyboard Enkel IME Engelsk (amerikansk) 

6. Definer tastaturoppsettet

Oppsettet på tastaturet inneholder bare a KeyboardView. De layout_alignParentBottom Attributtet er satt til ekte slik at tastaturet vises nederst på skjermen.

Opprett en fil som heter res / layout / keyboard.xml og erstatt innholdet med følgende:

 

De keyPreviewLayout er utformingen av kortvarig pop-up som vises når en tast på tastaturet er trykket. Den inneholder en singel TextView. Opprett en fil som heter res / layout / preview.xml og legg til følgende for det:

  

6. Definer tastaturtastene

Detaljer om tastaturnøklene og deres posisjoner er angitt i en XML-fil. Hver nøkkel har følgende attributter:

  • keyLabel: Denne attributtet inneholder teksten som vises på nøkkelen.
  • koder: Denne attributtet inneholder unicode-verdiene til tegnene som nøkkelen representerer.

For eksempel, å definere en nøkkel for brevet EN, de koder attributtet skal ha verdien 97 og keyLabel Attributtet skal settes til EN.

Hvis flere enn én kode er tilknyttet en nøkkel, vil karakteren som nøkkelen representerer, avhenge av antall kraner nøkkelen mottar. For eksempel, hvis en nøkkel har koder 63, 33, og 58:

  • Et enkelt trykk på nøkkelen resulterer i tegnet ?
  • to kraner i rask rekkefølge resulterer i karakteren !
  • tre kraner i rask rekkefølge resulterer i karakteren :

En nøkkel kan også ha noen valgfrie attributter:

  • keyEdgeFlags: Dette attributtet kan ta verdien venstre eller Ikke sant. Denne egenskapen legges vanligvis til i venstre og høyre side av en rad.
  • keyWidth: Denne attributtet definerer bredden på en nøkkel. Det er vanligvis definert som en prosentverdi.
  • isRepeatable: Hvis denne attributtet er satt til ekte, Langt trykk på tasten vil gjenta tastens handling flere ganger. Det er vanligvis satt til ekte for slett og mellomromstastene.

Nøklene til et tastatur er gruppert som rader. Det er god praksis å begrense antall nøkler på rad til maksimalt ti, med hver nøkkel som har en bredde som tilsvarer 10% av tastaturet. Nøkkelenes høyde er satt til 60dp i denne opplæringen. Denne verdien kan justeres, men verdier mindre enn 48dp anbefales ikke. Vårt tastatur vil ha fem rader med nøkler.

Vi kan nå gå videre og designe tastaturet. Opprett en ny fil som heter res / xml / qwerty.xml og erstatt innholdet med følgende:

                                                        

Du har kanskje lagt merke til at noen nøkler har negative verdier for koder Egenskap. Negative verdier er lik forhåndsdefinerte konstanter i Tastatur klasse. For eksempel verdien -5 er lik verdien av Keyboard.KEYCODE_DELETE.

7. Lag en Service Klasse

Opprett en ny Java-klasse og ring den SimpleIME.java. Klassen skal utvides InputMethodService klasse og implementere OnKeyboardActionListener grensesnitt. De OnKeyboardActionListener grensesnittet inneholder metodene som kalles når tastene på myktastaturet tappes eller trykkes.

De SimpleIME klassen skal ha tre medlemsvariabler:

  • en KeyboardView refererer til visningen som er definert i oppsettet
  • en Tastatur eksempel som er tildelt til KeyboardView
  • en boolean forteller oss om caps-lås er aktivert

Etter erklære disse variablene og legge til metodene til OnKeyboardActionListener grensesnitt, SimpleIME klassen skal se slik ut:

offentlig klasse SimpleIME utvider InputMethodService implementerer OnKeyboardActionListener private KeyboardView kv; private tastatur tastatur; private booleanske 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)  @ Overstyr offentlig tomgang swipeDown ()  @Override public void swipeLeft ()  @Override public void swipeRight ()  @Override public void swipeUp () 

Når tastaturet er opprettet, vil onCreateInputView Metoden kalles. Alle medlemsvariabler av Service kan initialiseres her. Oppdater implementeringen av onCreateInputView metode som vist nedenfor:

@Override public Vis onCreateInputView () kv = (KeyboardView) getLayoutInflater (). Oppblås (R.layout.keyboard, null); tastatur = nytt tastatur (dette, R.xml.qwerty); kv.setKeyboard (tastatur); kv.setOnKeyboardActionListener (this); return kv; 

Deretter oppretter vi en metode som spiller en lyd når en tast trykkes. Vi bruker Lydbehandling klassen for å spille lydene. Android SDK inneholder noen standardlyd effekter for nøkkelpresser og de brukes i playClick metode.

privat void playClick (int keyCode) AudioManager am = (AudioManager) getSystemService (AUDIO_SERVICE); bytte (keyCode) case 32: am.playSoundEffect (AudioManager.FX_KEYPRESS_SPACEBAR); gå i stykker; case Keyboard.KEYCODE_DONE: case 10: am.playSoundEffect (AudioManager.FX_KEYPRESS_RETURN); gå i stykker; case Keyboard.KEYCODE_DELETE: am.playSoundEffect (AudioManager.FX_KEYPRESS_DELETE); gå i stykker; standard: am.playSoundEffect (AudioManager.FX_KEYPRESS_STANDARD); 

Endelig oppdaterer du onkey metode slik at tastaturet vårt kan kommunisere med inntastingsfelt (vanligvis EditText visninger) av andre applikasjoner.

De getCurrentInputConnection Metoden brukes til å få en tilkobling til inngangsfeltet til et annet program. Når vi har tilkoblingen, kan vi bruke følgende metoder:

  • commitText for å legge til ett eller flere tegn i inntastingsfeltet
  • deleteSurroundingText for å slette ett eller flere tegn i inntastingsfeltet
  • sendKeyEvent å sende hendelser, som KEYCODE_ENTER, til den eksterne applikasjonen

Når en bruker trykker på en tast på tastaturet, onkey Metoden kalles med unicode-verdien av nøkkelen som en av parametrene. Basert på denne verdien utfører tastaturet en av følgende handlinger:

  • Hvis koden er KEYCODE_DELETE, Et tegn til venstre for markøren slettes ved hjelp av deleteSurroundingText metode.
  • Hvis koden er KEYCODE_DONE, en KEYCODE_ENTER nøkkelhendelsen er sparken.
  • Hvis koden er KEYCODE_SHIFT, verdien av caps variabelen er endret og skifttilstanden på tastaturet oppdateres ved hjelp av setShifted metode. Klaviaturet må redrawn når staten endres slik at etikettene til nøklene oppdateres. De invalidateAllKeys Metoden brukes til å omtrekke alle tastene.
  • For alle andre koder blir koden ganske enkelt konvertert til et tegn og sendt til inntastingsfeltet. Hvis koden representerer et bokstav i alfabetet og caps variabel er satt til ekte, så konverteres tegnet til store bokstaver.

Oppdater onkey metode slik at den ser slik ut:

@Override public void onKey (int primaryCode, int [] keyCodes) InputConnection ic = getCurrentInputConnection (); playClick (primaryCode); bytte (primaryCode) tilfelle tastatur.KEYCODE_DELETE: ic.deleteSurroundingText (1, 0); gå i stykker; case Keyboard.KEYCODE_SHIFT: caps =! caps; keyboard.setShifted (cap); kv.invalidateAllKeys (); gå i stykker; case Keyboard.KEYCODE_DONE: ic.sendKeyEvent (ny KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); gå i stykker; standard: char code = (char) primaryCode; hvis (Character.isLetter (kode) && caps) code = Character.toUpperCase (kode);  ic.commitText (String.valueOf (kode), 1); 

8. Teste tastaturet

Det myke tastaturet er nå klar til å bli testet. Kompilere og kjøre den på en Android-enhet. Denne appen har ikke en Aktivitet, noe som betyr at det ikke kommer opp i lanseringen. For å bruke den, bør den først aktiveres i enhetens innstillinger.

Etter aktivering Enkel IME, åpne et hvilket som helst app som tillater tekstinngang (for eksempel en meldingsapp) og klikk på ett av dens inntastingsfelter. Du bør se et tastaturikon vises i varslingsområdet. Avhengig av enheten din kan du enten klikke på det ikonet eller dra ned varslingsfeltet og velge Enkel IME som inngangsmetode. Du bør nå kunne skrive med ditt nye tastatur.

Konklusjon

I denne opplæringen har du lært hvordan du lager en tilpasset tastaturapp fra grunnen av. For å endre utseendet på tastaturet, er alt du trenger å gjøre, å legge til ekstra styling til res / layout / keyboard.xml og res / layout / preview.xml filer. For å endre posisjonene til nøklene, oppdater res / xml / qwerty.xml fil. For å legge til flere funksjoner på tastaturet, se utviklerens dokumentasjon.