Android – TextView TextStyle programmgesteuert festlegen?

Lesezeit: 3 Minuten

Benutzer-Avatar
Jake Wilson

Gibt es eine Möglichkeit die einzustellen textStyle Attribut von a TextView programmatisch? Es scheint keine zu geben setTextStyle() Methode.

Um es klar zu sagen, ich spreche nicht von Ansichts-/Widget-Stilen! Mir geht es um folgendes:

<TextView
  android:id="@+id/my_text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="Hello World"
  android:textStyle="bold" />

  • Sie können auf den folgenden Link verweisen und die oberste 1-Antwort sperren stackoverflow.com/questions/6200533/…

    – Tiep

    21. Oktober 2013 um 0:46 Uhr

  • Bitte überprüfen Sie meine Antwort hier. Ich hoffe, das wird Ihnen helfen

    – Zusammengefasster Jain

    25. November 2016 um 10:39 Uhr

Benutzer-Avatar
Raz

textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface ist das Attribut textStyle.

Wie Shankar V hinzugefügt, um die zuvor festgelegten Schriftattribute beizubehalten, können Sie Folgendes verwenden:

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

  • es sollte sein textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

    – Sankar V

    9. Januar 2015 um 7:31 Uhr

  • @IlyaEremin Um die zuvor festgelegte Schriftart beizubehalten, müssen Sie sie so verwenden.

    – Sankar V

    10. August 2015 um 5:57 Uhr

  • Meine Antwort wurde basierend auf dem Kommentar von @SankarV bearbeitet.

    – Raz

    11. August 2015 um 8:35 Uhr

  • Ich denke, Sie sollten den DEFAULT verlieren: holder.title.setTypeface (holder.title.getTypeface(), Typeface.BOLD);

    – Iman Akbari

    11. Februar 2016 um 12:51 Uhr

  • Eigentlich textview.getTypeface().getStyle() ist android:textStyle

    –Pierre

    19. März 2019 um 8:27 Uhr

Benutzer-Avatar
Oskar Salguero

Nehmen wir an, Sie haben einen Stil namens RedHUGEText in Ihrer values/styles.xml:

<style name="RedHUGEText" parent="@android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_size_huge</item>
    <item name="android:textColor">@color/red</item>
    <item name="android:textStyle">bold</item>
</style>

Erstellen Sie einfach Ihr TextView wie gewohnt in der XML-Datei layout/your_layout.xml, sagen wir:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" />

Und im Java-Code Ihrer Aktivität tun Sie dies:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

Bei mir hat es funktioniert! Und es hat Farbe, Größe, Schwerkraft usw. angewendet. Ich habe es ohne Probleme auf Handys und Tablets mit Android-API-Levels von 8 bis 17 verwendet. Beachten Sie, dass diese Methode ab Android 23 veraltet ist. Das Kontextargument wurde gelöscht, daher müsste die letzte Zeile lauten:

textViewTitle.setTextAppearance(R.style.RedHUGEText);

Verwenden Sie androidX, um alle API-Ebenen zu unterstützen TextViewCompat

TextViewCompat.setTextAppearance(textViewTitle, R.style.RedHUGEText)

Denken Sie daran … dies ist nur nützlich, wenn der Stil des Textes wirklich von einer Bedingung in Ihrer Java-Logik abhängt oder Sie die Benutzeroberfläche “on the fly” mit Code erstellen … wenn nicht, ist es besser, es einfach zu tun tun:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

Sie können es immer nach Ihren Wünschen haben!

  • Dadurch wird nur eine Teilmenge von Attributen festgelegt, die in a definiert werden können <style> Schild. Es macht die üblichen (Größe, Farbe, Stil), wendet aber keine anderen an (einschließlich Polsterung, Hintergrund, Schwerkraft usw.)

    – karl

    6. März 2014 um 0:31 Uhr


  • Scheint mindestens API 23 zu erfordern?

    – William T. Stockente

    28. Juni 2017 um 17:18 Uhr

  • Es gibt zwei Methoden, eine für API < 23 und eine für API 23+. Sie scheinen identisch zu sein, außer dass das für <23 ein Kontextargument verwendet und das für 23+ nicht. Unter der Haube ruft die für api 23+ die Methode für <23 auf und verwendet den Member-Kontext für die Textansicht.

    – MrPlow

    30. Juni 2017 um 15:05 Uhr


Benutzer-Avatar
peter.bartos

Suchen nach setTextAppearance oder auch setTextTypeface. Es gibt eine ähnliche Frage zu stackoverflow: How to change a TextView’s style at runtime

  • setTextAppearance veraltete API-Ebene 23

    – Athospie

    29. Oktober 2016 um 22:24 Uhr

  • Es gibt eine neue Methode für API 23+, die einfach kein Kontextargument akzeptiert.

    – MrPlow

    30. Juni 2017 um 15:03 Uhr

Benutzer-Avatar
Duggu

So viele Möglichkeiten, diese Aufgabe zu erfüllen, einige sind unten aufgeführt:-

1.

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));

2.

tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);

3.

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

4.

<?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>

 tv.setTextAppearance(getApplicationContext(), R.style.boldText);

oder wenn du willst durch xml

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

Benutzer-Avatar
Aminographie

Kotlin Version

Aktuelle Schriftart zusätzlich zum Textstil beibehalten:

textView.apply {
    setTypeface(typeface, Typeface.NORMAL)
    // or
    setTypeface(typeface, Typeface.BOLD)
    // or
    setTypeface(typeface, Typeface.ITALIC)
    // or
    setTypeface(typeface, Typeface.BOLD_ITALIC)
}

Benutzer-Avatar
Gemeinschaft

Diese Frage wird an vielen Stellen auf sehr unterschiedliche Weise gestellt. Ich habe es ursprünglich hier beantwortet, aber ich denke, es ist auch in diesem Thread relevant (da ich hier gelandet bin, als ich nach einer Antwort gesucht habe).

Es gibt keine einzeilige Lösung für dieses Problem, aber dies hat für meinen Anwendungsfall funktioniert. Das Problem ist, dass der Konstruktor „View(context, attrs, defStyle)“ nicht auf einen tatsächlichen Stil verweist, sondern ein Attribut benötigt. Wir werden:

  1. Definieren Sie ein Attribut
  2. Erstellen Sie einen Stil, den Sie verwenden möchten
  3. Wenden Sie einen Stil für dieses Attribut auf unser Thema an
  4. Erstellen Sie neue Instanzen unserer Ansicht mit diesem Attribut

Definieren Sie in ‚res/values/attrs.xml‘ ein neues Attribut:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="customTextViewStyle" format="reference"/>
    ...
</resources>    

In res/values/styles.xml’ werde ich den Stil erstellen, den ich für meine benutzerdefinierte TextView verwenden möchte

<style name="CustomTextView">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:paddingLeft">14dp</item>
</style>

Ändern Sie in „res/values/themes.xml“ oder „res/values/styles.xml“ das Design für Ihre Anwendung/Aktivität und fügen Sie den folgenden Stil hinzu:

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
    </style>
    ... 
</resources>

Schließlich können Sie in Ihrem benutzerdefinierten TextView jetzt den Konstruktor mit dem Attribut verwenden und es wird Ihren Stil erhalten

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
       super(context, null, R.attr.customTextView);
    }
}

Es ist erwähnenswert, dass ich customTextView wiederholt in verschiedenen Varianten und an verschiedenen Stellen verwendet habe, aber es ist in keiner Weise erforderlich, dass der Name der Ansicht mit dem Stil oder dem Attribut oder irgendetwas übereinstimmt. Außerdem sollte diese Technik mit jeder benutzerdefinierten Ansicht funktionieren, nicht nur mit TextViews.

Benutzer-Avatar
Strahl Jäger

Das hat bei mir funktioniert

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

oder

textview.setTypeface(Typeface.DEFAULT_BOLD);

1350900cookie-checkAndroid – TextView TextStyle programmgesteuert festlegen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy