Créer un clavier personnalisé sur Android

Ce que vous allez créer

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..

Option Premium

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 Android

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

Si vous préférez construire le vôtre, lisez la suite pour savoir comment.

1. Prérequis

Vous aurez besoin du kit Eclipse ADT installé. Vous pouvez le télécharger depuis le site Web Android Developer..

2. Créer un nouveau projet

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.

3. Modifier le manifeste

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:

     

4. Créer method.xml

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:

   

5. Editez strings.xml

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:

  • le nom de l'application
  • l'étiquette de l'IME
  • l'étiquette du sous-type de l'IME

Mettez à jour votre strings.xml afin qu'il ait le contenu suivant:

 SimpleKeyboard IME simple Anglais (US) 

6. Définir la disposition du clavier

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:

  

6. Définir les touches du clavier

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:

  • un simple appui sur la touche donne le caractère ?
  • deux tapotements successifs se traduisent par le personnage !
  • trois coups successifs se traduisent par le caractère :

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.

7. Créer un Un service Classe

Cré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:

  • une KeyboardView référençant la vue définie dans la mise en page
  • une Clavier instance qui est assignée à la KeyboardView
  • une 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 saisie
  • deleteSurroundingText supprimer un ou plusieurs caractères du champ de saisie
  • sendKeyEvent pour envoyer des événements, comme KEYCODE_ENTER, à l'application externe

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

  • Si le code est KEYCODE_DELETE, un caractère à gauche du curseur est supprimé à l'aide de la touche deleteSurroundingText méthode.
  • Si le code est KEYCODE_DONE, une KEYCODE_ENTER événement clé est déclenché.
  • Si le code est 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.
  • Pour tous les autres codes, le code est simplement converti en un caractère et envoyé au champ de saisie. Si le code représente une lettre de l'alphabet et le mot 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); 

8. Test du clavier

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.

Conclusion

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..