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.
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 TemaerEller 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 StudioHvis du foretrekker å bygge din egen, les videre for å finne ut hvordan.
Du trenger Eclipse ADT Bundle installert. Du kan laste den ned fra Android Developer-nettstedet.
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.
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:
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:
Strengene som denne appen bruker, er definert i res / verdier / strings.xml fil. Vi kommer til å trenge tre strenger:
Oppdater din strings.xml slik at den har følgende innhold:
SimpleKeyboard Enkel IME Engelsk (amerikansk)
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:
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:
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
.
Service
KlasseOpprett 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:
KeyboardView
refererer til visningen som er definert i oppsettetTastatur
eksempel som er tildelt til KeyboardView
boolean
forteller oss om caps-lås er aktivertEtter 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 inntastingsfeltetdeleteSurroundingText
for å slette ett eller flere tegn i inntastingsfeltetsendKeyEvent
å sende hendelser, som KEYCODE_ENTER
, til den eksterne applikasjonenNå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:
KEYCODE_DELETE
, Et tegn til venstre for markøren slettes ved hjelp av deleteSurroundingText
metode.KEYCODE_DONE
, en KEYCODE_ENTER
nøkkelhendelsen er sparken.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.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);
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.
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.