So ändern Sie den Stil einer Textansicht zur Laufzeit


98

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

Ich dachte, ich finde ein, textview.setStyle()aber es existiert nicht. Ich habe es versucht

textview.setTextAppearance();

aber es funktioniert nicht.


1
Ich habe irgendwo gelesen, dass dies nicht möglich ist ... stackoverflow.com/questions/2016249/… . Sie können einige Eigenschaften jedoch separat festlegen.
Floern

1
Haben Sie versucht: textView.setTextTypeface? developer.android.com/reference/android/widget/…
Jonathan Roth

21
@Falmarri Haben SIE die TextView-API-Dokumente durchgesehen? Wenn ja, könnten Sie vielleicht etwas Konstruktiveres sagen.
Fletch

Antworten:


143

Dazu habe ich eine neue XML-Datei res/values/style.xmlwie folgt 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 Einträge in meiner "strings.xml" -Datei 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 in dieser TextView abzufangen: BEARBEITEN : Ab API 23 ist 'setTextAppearance' veraltet

    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, würden Sie Folgendes verwenden:

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

2
Eigentlich funktioniert das nicht mit Schattenstilen. Wenn Sie den Schatten ändern möchten, müssen Sie dies folgendermaßen tun: lockText.setShadowLayer (20, 4, 4, 0xFFFF0000);
Lukas

3
Um die SDK-Überprüfung zu vermeiden, können Sie TextViewCompat.setTextAppearance (myTextView, R.style.myStyle) verwenden.
Justin Fiedler

90

Wie Jonathan vorgeschlagen hat textView.setTextTypeface, habe ich es vor einigen Sekunden in einer App verwendet.

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.

9
Sie können textView.setTypeface (null, Typeface.BOLD) verwenden. textView..setTypeface (null, Typeface.ITALIC); textView.setTypeface (null, Typeface.BOLD_ITALIC);
Peceps

2
textView.setTypeface (null, Typeface.BOLD) hat bei mir funktioniert. Natürlich könnten Sie stattdessen 1 verwenden, aber ich denke, es ist keine gute Praxis, Konstanten manuell einzugeben. Verwenden Sie besser vordefinierte Variablen in Bibliotheken.
Pijusn

4
Ermutigen Sie die Leute nicht, Ints anstelle von Konstanten zu verwenden
Chris.Jenkins

3
Gut! Mein Fehler war, dass ich meine alte Schrift im ersten Parameter gesendet habe. Es funktioniert also, wenn ich NORMAL -> BOLD, aber nicht BOLD -> NORMAL ändere. Ich wusste nicht, dass der erste Parameter null sein kann! Jetzt funktioniert es gut für mich!
Felipe

12
TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

Sie können es aus Code einstellen. Schrift


4

Programmatisch: Laufzeit

Sie können dies programmgesteuert mit setTypeface () tun:

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

Summiert


2

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


Dies ändert die Schrift. nicht der vom OP angegebene Stil.
HBG

Zwar war dies zum Zeitpunkt des Beitrags die einfachste Methode - und soweit ich mich an die einzige Methode erinnere. Ich bin mir nicht sicher, ob in der Zwischenzeit eine neue API-Methode hinzugefügt wurde, mit der der "Stil" fett gedruckt werden kann, ohne die Schriftart zu ändern. Bitte korrigieren Sie mich, wenn ich falsch liege.
Sfera

1

Versuchen Sie diese Codezeile.

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

Hier wird die aktuelle Schrift aus dieser Textansicht abgerufen und durch eine neue Schrift ersetzt. Neue Schriftart hier ist, DEFAULT_BOLDaber Sie können viel mehr anwenden.


Sie möchten lieber erklären, warum Ihr Code sein Problem lösen wird, danke.
Muhammed Refaat

Das OP möchte den Stil ändern, nicht die Schrift.
HBG


0

Je nachdem, welchen Stil Sie festlegen möchten, müssen Sie unterschiedliche Methoden verwenden. TextAppearance-Inhalte haben einen eigenen Setter, TypeFace hat einen eigenen Setter, der Hintergrund hat einen eigenen Setter usw.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.