我在Android上有一个RPG项目,但我有一点问题:
我想为特定字符设置特定颜色,但Android不会返回return Html.fromHtml("</font><font color = #00FF00>" + a +"</font><font color = #FFFFFF>");
我该怎么做? 这是我的代码:(在main中调用的函数是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
}
}
所以这个效果不好,因为我想要着色的字符是char而不是String。
答案 0 :(得分:2)
您可以使用SpannableString和ForegroundColorSpan
的概念来实现它使用可以使用以下代码段:(您必须计算索引)
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);