简体   繁体   中英

Return spanned string android

I have a project for a RPG on Android but i have a little problem: I'd like to set a specific color for a specific char but Android won't return something like return Html.fromHtml("</font><font color = #00FF00>" + a +"</font><font color = #FFFFFF>");

How can I do that? Here's my code : (the function called in main is affPlate() )

public class TableauClass {
Random rand = new Random(); // rand sert à générer des nombres aléatoires
int h ; // hauteur du plateau de jeu
int l ; // largeur du plateau de jeu
char casePlateau [][]; // tableau à double entrée d'entiers représentant le  plateau

public void initTableau(){ // remplissage du tableau avec murs et sols

    h = rand.nextInt(9-4+1)+4; //hauteur aléatoire entre 4 et 14
    l = rand.nextInt(9-4+1)+4; // largeur aleéatoire entre 4 et 27
    casePlateau  = new char [h][l]; // création du tableau de char de hauteur h et de largeur l
    for (int i = 0; i < h; i++){ // on commence par remplir tout le tableau avec du sol ('s')
        for (int j = 0; j < l; j++){
            casePlateau [i][j] = ' ';
        }
    }
    for (int i = 0; i < h; i++){ // on met des murs à droite et à gauche
        casePlateau [i][0] = '█';
        casePlateau [i][l-1] = '█';

    }
    for (int i = 0; i < l; i++){// on met des murs en haut et en bas
        casePlateau [0][i] = '█';
        casePlateau [h-1][i] = '█';
    }
    casePlateau [h-2][l-2] = '@';
}

public TableauClass(){ // constructeur du plateau

    //casePlateau  = new char [h][l]; // création du tableau de char de hauteur h et de largeur l
    initTableau(); // remplissage du plateau

}
public String affplate(){ // methode d'affichage du tableau
    String plateau; // chaine de caractère affichant le plateau
    String lh = "╔"; // affectation de la couleur et premier caractère  de la ligne du haut
    String lm = "";  // ligne du milieu
    String li = "╠"; // interligne
    String lb = "╚"; //ligne du bas
    for (int i = 0; i < l-1; i++){
        lh = lh + "═══╦"; // on rajoute une case à la ligne du haut autant de fois que la longueur-1 du plateau
        li = li + "═══╬"; // on rajoute une case à la ligne du milieu autant de fois que la longueur-1 du plateau
        lb = lb + "═══╩"; // on rajoute une case à la ligne du bas autant de fois que la longueur-1 du plateau
    }
    lh = lh + "═══╗\n"; // dernière case de la ligne du haut
    li = li + "═══╣\n"; // dernière case de la ligne du milieu
    lb = lb + "═══╝"; // dernière case de la ligne du bas et fin de la couleur
    plateau = lh; // on commence par remplir le plateau avec la ligne du haut

    for (int i = 0; i<=h-1; i++){ // pour chaque colonne
        lm = "║ "; // la ligne du milieu commence avec un ║
        for (int j = 0; j < l; j++){ // pour chaque élément de la colonne

            lm = lm + (casePlateau[i][j]) +" ║ "; // on ajoute le caractère de la case concernée entre 2 despaces puis un ║
            // pour cela on utilise la fonction couleurChar qui gère le changement de couleur en fonction de la case
        }
        lm = lm + "\n"; // on rajoute un retour à la ligne

        if (i != h-1){ // on rajoute la ligne obtenue au plateau et une ligne intermédiaire sauf pour la dernière ligne
            plateau = plateau+lm+li;
        }

    }
    plateau = plateau+lm+lb; // on rajoute la dernière ligne
    return plateau; // on retourne la chaine de caractère définissant le plateau
}

}

So this is not working well as the characters I want to color are char and not String.

You can achieve it using concept of SpannableString and ForegroundColorSpan

Use can use following snippet: ( Index you will have to calculate )

TextView textView = (TextView)findViewById(R.id.text);

Spannable spannableString = new SpannableString("Sample String");        

spannableString.setSpan(new ForegroundColorSpan(Color.RED),5,6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(spannableString);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM