La plupart des appareils Android n'ont pas de clavier physique. Au lieu de cela, ils s'appuient sur un clavier virtuel ou logiciel pour accepter les entrées de l'utilisateur. Si vous aimez la personnalisation Android, savoir comment créer un clavier logiciel personnalisé peut faire passer votre passe-temps à un tout autre niveau..
Avec le SDK Android, vous pouvez créer rapidement un clavier logiciel avec étonnamment peu de lignes de code, car le SDK prend en charge une grande partie des tâches de bas niveau, telles que la reconnaissance des touches du clavier, le dessin du clavier et l'établissement de connexions entre le clavier et le clavier. champs de saisie.
Dans ce didacticiel, vous apprendrez à créer un clavier logiciel entièrement fonctionnel pouvant servir de clavier par défaut pour votre appareil Android..
Si vous êtes pressé, découvrez Android Keyboard Themes, une solution prête à l'emploi d'Envato Market..
L'application vous donne la possibilité de choisir l'un des 22 thèmes de clavier intégrés ou de créer votre propre thème personnalisé.
Thèmes du clavier AndroidOu vous pouvez engager un pigiste sur Envato Studio. Il suffit de parcourir notre section Mobile & Apps et vous êtes sûr de trouver un expert qui peut vous aider.
Développeurs mobiles et d'applications sur Envato StudioSi vous préférez construire le vôtre, lisez la suite pour savoir comment.
Vous aurez besoin du kit Eclipse ADT installé. Vous pouvez le télécharger depuis le site Web Android Developer..
Lancez Eclipse et créez une nouvelle application Android. Appelez cette application, SimpleKeyboard. Assurez-vous de choisir un nom de package unique. Définissez le SDK minimum requis sur Android 2.2 et définissez le SDK cible sur Android 4.4.
Cette application n'aura aucune activité alors désélectionnez Créer une activité et cliquez terminer.
Un clavier logiciel est considéré comme un Éditeur de méthode de saisie (IME) par le système d'exploitation Android. Un IME est déclaré en tant que Un service
dans AndroidManifest.xml qui utilise le BIND_INPUT_METHOD
permission, et répond à l'action android.view.InputMethod
.
Ajoutez les lignes suivantes au application
étiquette du manifeste:
le un service
la balise dans le fichier manifeste contient un méta-données
balise faisant référence à un fichier XML nommé method.xml. Sans ce fichier, le système d'exploitation Android ne reconnaîtra pas notre Un service
en tant que service IME valide. Le fichier contient des détails sur la méthode de saisie et ses sous-types. Pour notre clavier, nous définissons un seul sous-type pour le en_US lieu. Créer le répertoire res / xml s'il n'existe pas, ajoutez le fichier method.xml à cela. Le contenu du fichier devrait être:
Les chaînes que cette application utilise sont définies dans le res / values / strings.xml fichier. Nous allons avoir besoin de trois chaînes:
Mettez à jour votre strings.xml afin qu'il ait le contenu suivant:
SimpleKeyboard IME simple Anglais (US)
La disposition de notre clavier contient seulement un KeyboardView
. le layout_alignParentBottom
attribut est mis à vrai
de sorte que le clavier apparaisse au bas de l'écran.
Créer un fichier nommé res / layout / keyboard.xml et remplacez son contenu par ce qui suit:
le keyPreviewLayout
est la disposition de la fenêtre contextuelle de courte durée qui apparaît chaque fois que vous appuyez sur une touche du clavier. Il contient un seul Affichage
. Créer un fichier nommé res / layout / preview.xml et ajoutez ce qui suit:
Les détails des touches du clavier et leurs positions sont spécifiés dans un fichier XML. Chaque clé a les attributs suivants:
keyLabel
: Cet attribut contient le texte affiché sur la clé.codes
: Cet attribut contient les valeurs unicode des caractères que la clé représente.Par exemple, pour définir une clé pour la lettre UNE, la codes
attribut devrait avoir la valeur 97 et le keyLabel
attribut doit être réglé sur UNE.
Si plusieurs codes sont associés à une clé, le caractère représenté par la clé dépendra du nombre de tapotements reçus par la clé. Par exemple, si une clé a les codes 63, 33, et 58:
Une clé peut aussi avoir quelques attributs optionnels:
keyEdgeFlags
: Cet attribut peut prendre la valeur la gauche
ou droite
. Cet attribut est généralement ajouté aux clés les plus à gauche et les plus à droite d'une ligne..keyWidth
: Cet attribut définit la largeur d'une clé. Il est généralement défini comme une valeur en pourcentage.estRepeatable
: Si cet attribut est défini sur vrai
, une pression longue sur la touche répétera l'action de la touche plusieurs fois. Il est généralement réglé sur vrai
pour les touches delete et spacebar.Les touches d'un clavier sont regroupées sous forme de lignes. Il est recommandé de limiter le nombre de touches d’une rangée à un maximum de dix, chaque touche ayant une largeur égale à 10% du clavier. La hauteur des touches est définie sur 60dp dans ce tutoriel. Cette valeur peut être ajustée, mais les valeurs inférieures à 48dp ne sont pas recommandés. Notre clavier aura cinq rangées de touches.
Nous pouvons maintenant aller de l'avant et concevoir le clavier. Créer un nouveau fichier nommé res / xml / qwerty.xml et remplacez son contenu par ce qui suit:
Vous avez peut-être remarqué que certaines clés ont des valeurs négatives pour codes
attribut. Les valeurs négatives sont égales aux constantes prédéfinies dans Clavier
classe. Par exemple, la valeur -5
est égal à la valeur de Keyboard.KEYCODE_DELETE
.
Un service
ClasseCréez une nouvelle classe Java et appelez-la SimpleIME.java. La classe devrait s'étendre InputMethodService
classe et mettre en œuvre le OnKeyboardActionListener
interface. le OnKeyboardActionListener
interface contient les méthodes appelées lorsque vous appuyez sur les touches du clavier virtuel ou que vous appuyez dessus.
le SimpleIME
la classe devrait avoir trois variables de membre:
KeyboardView
référençant la vue définie dans la mise en pageClavier
instance qui est assignée à la KeyboardView
booléen
nous dire si le verrouillage des majuscules est activéAprès avoir déclaré ces variables et ajouté les méthodes de la OnKeyboardActionListener
interface, la SimpleIME
la classe devrait ressembler à ceci:
Classe publique SimpleIME étend InputMethodService implémente OnKeyboardActionListener private KeyboardView kv; clavier privé; Caps booléens privés = faux; @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) Remplacer le public void swipeDown () @ Annuler le public public swipeLeft () @Override public le vide swipeRight () @Override public le vide swipeUp ()
Lorsque le clavier est créé, le onCreateInputView
méthode est appelée. Toutes les variables membres du Un service
peut être initialisé ici. Mettre à jour la mise en œuvre de la onCreateInputView
méthode comme indiqué ci-dessous:
@Override public View onCreateInputView () kv = (KeyboardView) getLayoutInflater (). Inflate (R.layout.keyboard, null); keyboard = new Keyboard (this, R.xml.qwerty); kv.setKeyboard (clavier); kv.setOnKeyboardActionListener (this); retour kv;
Ensuite, nous créons une méthode qui joue un son quand une touche est enfoncée. Nous utilisons le AudioManager
classe pour jouer les sons. Le SDK Android comprend quelques effets sonores par défaut pour les touches utilisées. Ceux-ci sont utilisés dans playClick
méthode.
lecture privée privéeCliquez sur (int keyCode) AudioManager am = (AudioManager) getSystemService (AUDIO_SERVICE); switch (code de touche) cas 32: am.playSoundEffect (AudioManager.FX_KEYPRESS_SPACEBAR); Pause; case Keyboard.KEYCODE_DONE: cas 10: am.playSoundEffect (AudioManager.FX_KEYPRESS_RETURN); Pause; case Clavier.KEYCODE_DELETE: am.playSoundEffect (AudioManager.FX_KEYPRESS_DELETE); Pause; défaut: am.playSoundEffect (AudioManager.FX_KEYPRESS_STANDARD);
Enfin, mettez à jour le onKey
méthode permettant à notre application de clavier de communiquer avec les champs de saisie (généralement Éditer le texte
vues) d'autres applications.
le getCurrentInputConnection
méthode est utilisée pour établir une connexion avec le champ de saisie d’une autre application. Une fois la connexion établie, nous pouvons utiliser les méthodes suivantes:
commitText
ajouter un ou plusieurs caractères au champ de saisiedeleteSurroundingText
supprimer un ou plusieurs caractères du champ de saisiesendKeyEvent
pour envoyer des événements, comme KEYCODE_ENTER
, à l'application externeChaque fois qu'un utilisateur appuie sur une touche du clavier tactile, le onKey
La méthode est appelée avec la valeur unicode de la clé parmi ses paramètres. En fonction de cette valeur, le clavier effectue l'une des opérations suivantes:
KEYCODE_DELETE
, un caractère à gauche du curseur est supprimé à l'aide de la touche deleteSurroundingText
méthode.KEYCODE_DONE
, une KEYCODE_ENTER
événement clé est déclenché.KEYCODE_SHIFT
, la valeur de la casquettes
la variable est changée et l’état de décalage du clavier est mis à jour en utilisant le setShifted
méthode. Le clavier doit être redessiné lorsque l'état change afin que les étiquettes des touches soient mises à jour. le invalidateAllKeys
méthode est utilisée pour redessiner toutes les clés.casquettes
variable est définie sur vrai
, alors le caractère est converti en majuscule.Mettre à jour le onKey
méthode pour qu'il ressemble à ceci:
@Override public void onKey (int primaryCode, int [] keyCodes) InputConnection ic = getCurrentInputConnection (); playClick (primaryCode); switch (primaryCode) case Keyboard.KEYCODE_DELETE: ic.deleteSurroundingText (1, 0); Pause; case Keyboard.KEYCODE_SHIFT: caps =! caps; keyboard.setShifted (majuscules); kv.invalidateAllKeys (); Pause; case Keyboard.KEYCODE_DONE: ic.sendKeyEvent (nouveau KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); Pause; défaut: char code = (char) primaryCode; if (Character.isLetter (code) && caps) code = Character.toUpperCase (code); ic.commitText (String.valueOf (code), 1);
Le clavier logiciel est maintenant prêt à être testé. Compilez-le et exécutez-le sur un appareil Android. Cette application n'a pas de Activité
, ce qui signifie qu'il n'apparaîtra pas dans le lanceur. Pour l'utiliser, il faut d'abord l'activer dans l'appareil. Réglages.
Après avoir activé IME simple, Ouvrez une application qui permet la saisie de texte (par exemple, une application de messagerie) et cliquez sur l'un de ses champs de saisie. Une icône de clavier devrait apparaître dans la zone de notification. Selon votre appareil, vous pouvez soit cliquer sur cette icône, soit faire glisser la barre de notification vers le bas et sélectionner IME simple comme méthode de saisie. Vous devriez maintenant être capable de taper avec votre nouveau clavier.
Dans ce tutoriel, vous avez appris à créer une application de clavier personnalisée à partir de rien. Pour changer l'apparence de votre clavier, il vous suffit d'ajouter un style supplémentaire à la res / layout / keyboard.xml et res / layout / preview.xml des dossiers. Pour changer les positions des touches, mettez à jour le res / xml / qwerty.xml fichier. Pour ajouter plus de fonctionnalités à votre clavier, reportez-vous à la documentation du développeur..