2017-10-04 10 views
1

Dans ma demande, je veux montrer un texte en TextView, et je reçois ce texte de serveur.
Je devrais utiliser un seul textView en format XML, et je devrais définir couleur pour ce Textes.
Mon XML:Comment définir dynamiquement la couleur pour TextView dans Android

<TextView 
    android:id="@+id/rowExplore_userName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="@dimen/size3" 
    android:layout_marginTop="@dimen/padding8" 
    android:layout_toRightOf="@+id/rowExplore_imageCard" 
    android:fontFamily="sans-serif" 
    android:gravity="left|center_vertical" 
    android:text="Adam" 
    android:textColor="@color/colorPrimary" 
    android:textSize="@dimen/font14" /> 

JSON:

"name": "Adam Sandel", 
    "info": "liked", 
    "movieName": "SpiderMan", 

code Java:

rowExplore_userName.setText(response.getName() + response.getInfo() + response.getMovieName()); 

Je veux définir la couleur dynamique, comme image ci-dessous: enter image description here

Comment puis-je it? S'il vous plaît aidez-moi

+0

Je pense que cela vous aidera: https://stackoverflow.com/questions/3282940/set-color-of-textview-span-in-android –

Répondre

1

Vous pouvez utiliser HTML

String text = "<font color=#cc0029>First Color</font> <font color=#ffcc00>Second Color</font>"; 
yourtextview.setText(Html.fromHtml(text)); 
+0

merci mon cher ami <3 –

+0

Vous êtes les bienvenus :) –

0

Une meilleure approche est de créer une ressource de chaîne avec des balises HTML appropriées:

<string name="html_string" formatted="false"> 
    <![CDATA[ 
     <font color="yellow">%s</font> %s <font color="yellow">%s</font> 
    ]]> 
</string> 

Et puis obtenir cette chaîne avec des ressources:

String htmlString = getString(R.strings.html_string, response.getName(), response.getInfo(), response.getMovieName()); 
rowExplore_userName.setText(htmlString); 
0

J'ai utilisé ce code:

String colorStr="#FFFFFF" //put your hex color 
int color = Color.parseColor(colorStr); 
editText.setTextColor(color); 
0

Vous pouvez utiliser SpannableString si vous voulez éviter d'utiliser des balises HTML

TextView textview = (TextView)findViewById(R.id.textview); 

Spannable wordToSpan = new SpannableString("Your text is here");   
wordToSpan.setSpan(new ForegroundColorSpan(Color.BLUE), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

textView.setText(wordToSpan); 

et il est plus souple puisque vous pouvez apporter d'autres modifications à votre texte (taille du texte, gras/italique, etc.)

0

j'aurais une autre approche il suffit de créer une méthode

public String getColoredString(String pname) { 
    Random rnd = new Random(); 
    int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
    Spannable wordToSpan = new SpannableString(pname); 
    wordToSpan.setSpan(new ForegroundColorSpan(color), 0, pname.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return wordToSpan.toString(); 
} 

et utiliser la méthode ci-dessus

rowExplore_userName.setText(getColoredString(response.getName())+getColoredString(response.getInfo())+getColoredString(response.getMovieName())); 

cela devrait fonctionner.