web-dev-qa-db-ger.com

So ändern Sie den Stil eines TextView zur Laufzeit

Ich habe eine Android-App, auf die ich einen definierten Stil anwenden möchte, wenn der Benutzer eine TextView antippt.

Ich dachte, eine textview.setStyle() zu finden, aber sie existiert nicht. Ich habe es versucht 

textview.setTextAppearance();

aber es funktioniert nicht.

92
Cris

Dazu habe ich eine neue XML-Datei res/values/style.xml erstellt:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="Android:textStyle">bold|italic</item>
        <item name="Android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="Android:textStyle">normal</item>
        <item name="Android:textColor">#C0C0C0</item>
    </style>

</resources>

Ich habe auch einen Eintrag in meiner Datei "strings.xml" wie folgt:

<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>

Dann habe ich in meinem Code einen ClickListener erstellt, um das tap -Ereignis für diese TextView abzufangen: EDIT:Ab API 23 ist 'setTextAppearance' nicht mehr empfohlen

    myTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){
                    //highlight the TextView
                    //myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    if (Build.VERSION.SDK_INT < 23) {
       myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    } else {
       myTextView.setTextAppearance(R.style.boldText);
    }
     myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
                }
            });

Um es wieder zu ändern, verwenden Sie Folgendes:

if (Build.VERSION.SDK_INT < 23) {
    myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
   myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);
137
Glenn

Wie Jonathan vorschlug, textView.setTextTypeface funktioniert, habe ich ihn vor wenigen Sekunden in einer App verwendet.

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.
88
DKDiveDude
TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

Sie können es aus dem Code setzen. Schrift

11
Azhar

Programmgesteuert: Laufzeit

Sie können programmgesteuert mit setTypeface () arbeiten:

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

XML: Entwurfszeit

Sie können auch in XML festlegen:

Android:textStyle="normal"
Android:textStyle="normal|bold"
Android:textStyle="normal|italic"
Android:textStyle="bold"
Android:textStyle="bold|italic"

Hoffe das wird helfen

Zusammengefasst

3
Summved Jain

ich fand textView.setTypeface(Typeface.DEFAULT_BOLD); als die einfachste Methode.

2
sfera

versuchen Sie diese Codezeile. 

textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

hier wird die aktuelle Schrift von dieser Textansicht abgerufen und durch die neue Schrift ersetzt. Die neue Schrift hier ist DEFAULT_BOLD, aber Sie können noch viel mehr anwenden. 

1

Je nachdem, welchen Stil Sie einstellen möchten, müssen Sie unterschiedliche Methoden verwenden. TextAppearance Zeug hat einen eigenen Setter, TypeFace hat einen eigenen Setter, Hintergrund hat einen eigenen Setter usw.

0
akohout

Siehe doco für setText () in TextView http://developer.Android.com/reference/Android/widget/TextView.html

Um Ihre Zeichenfolgen zu formatieren, hängen Sie Android.text.style. * -Objekte an einen SpannableString an. In der Dokumentation zu Available Resource Types finden Sie ein Beispiel zum Festlegen von formatiertem Text in der XML-Ressourcendatei.

0
GSree