Gestion des smiley dans votre application Android

http://www.maraumax.fr/medias/Billets/android_150.pngPour mon application Bonjour Android j'ai mis en place une nouvelle fonctionnalité permettant de commenter les images. Après avoir mis en place la liste des commentaires, je me suis dit qu'il manquait quelque chose : la gestion des smileys (ou smilies si vous préférez !)

Il n'existe pas nativement de classe permettant de gérer les smilies sur Android mais on peut en trouver en utilisant votre moteur de recherche préféré !

Je suis donc tombé sur ce projet qui offre une classe ainsi que les images nécessaire pour la mise en place du système de conversion des smiley.

Commencez par télécharger l'archive du projet en cliquant sur zip en haut de la page.

Ensuite copiez les images des dossiers "res/drawable-hdpi" et "res/drawable-mdpi" dans les dossiers respectifs de votre projet. Créez un fichier (si ce n'est pas déjà fait) dans votre répertoire values nommé arrays.xml et contenant le code suivant :

<?xml version="1.0" encoding="utf-8"?>
<!--
* Copyright (C) 2008 Esmertec AG.
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
-->
<resources>
    <!-- NOTE: if you change anything about this array, you must make the corresponding change
to the array DEFAULT_SMILEY_RES_IDS in MessageListItem.java and to default_smiley_names
below. -->
    <string-array name="default_smiley_texts">
      <item>:-)</item> <!-- 0: Happy -->
      <item>:-(</item> <!-- 1: Sad -->
      <item>;-)</item> <!-- 2: Winking -->
      <item>:-P</item> <!-- 3: Tongue sticking out -->
      <item>=-O</item> <!-- 4: Surprised -->
      <item>:-*</item> <!-- 5: Kissing -->
      <item>:O</item> <!-- 6: Yelling -->
      <item>B-)</item> <!-- 7: Cool -->
      <item>:-$</item> <!-- 8: Money mouth -->
      <item>:-!</item> <!-- 9: Foot in mouth -->
      <item>:-[</item> <!-- 10: Embarrassed -->
      <item>O:-)</item> <!-- 11: Angel -->
      <item>:-\\</item> <!-- 12: Undecided -->
      <item>:\'(</item> <!-- 13: Crying -->
      <item>:-X</item> <!-- 14: Lips are sealed -->
      <item>:-D</item> <!-- 15: Laughing -->
      <item>o_O</item> <!-- 16: Confused -->
    </string-array>
 
    <!-- NOTE: if you change anything about this array, you must make the corresponding change
to the array DEFAULT_SMILEY_RES_IDS in MessageListItem.java and to default_smiley_texts
above. -->
    <string-array name="default_smiley_names">
        <item>Happy</item> <!-- 0: :-) -->
        <item>Sad</item> <!-- 1: :-( -->
        <item>Winking</item> <!-- 2: ;-) -->
        <item>Tongue sticking out</item> <!-- 3: :-P -->
        <item>Surprised</item> <!-- 4: =-O -->
        <item>Kissing</item> <!-- 5: :-* -->
        <item>Yelling</item> <!-- 6: :O -->
        <item>Cool</item> <!-- 7: B-) -->
        <item>Money mouth</item> <!-- 8: :-$ -->
        <item>Foot in mouth</item> <!-- 9: :-! -->
        <item>Embarrassed</item> <!-- 10: :-[ -->
        <item>Angel</item> <!-- 11: O:-) -->
        <item>Undecided</item> <!-- 12: :-\\ -->
        <item>Crying</item> <!-- 13: :\'( -->
        <item>Lips are sealed</item> <!-- 14: :-X -->
        <item>Laughing</item> <!-- 15: :-D -->
        <item>Confused</item> <!-- 16: o_O -->
    </string-array>
</resources>

Vous pouvez modifier dans la première partie les codes correspondant aux smileys, mais je vous conseille de ne pas y toucher car c'est les correspondances par défaut d'android.

Copiez ensuite la classe SmileyParser du répertoire "src/com/episode6/android/smiley" dans votre projet.

Ils vous suffit ensuite d'instancier la classe et d'utiliser la méthode de conversion. Voici un exemple avec un ArrayAdapter.

// On importe les classes nécessaires
import net.monprojet.SmileyParser;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
 
public class CommentaireAdapt ArrayAdapter<Commentaire> {
 
	private SmileyParser parser;
 
	public CommentaireAdapter(Context context, List<Commentaire> comments) {
		// [...]
		// On prépare le parser
		SmileyParser.init(getContext());
        	this.parser = SmileyParser.getInstance();
	}
 
	public View getView(int position, View convertView, ViewGroup parent) {
		// [...]
		// Et on parse le commentaire
		textCommentaire.setText(this.parser.addSmileySpans(item.getTexte()));
	}
}

En espérant vous avoir donné un coup de main, n'hésitez pas si vous avez des remarques ou questions !

Billets relatifs

Ajouter un commentaire





Les commentaires sont validés manuellement afin d'éviter le spam.