Çalışma zamanında bir TextView stilini değiştirme


99

Kullanıcı bir a dokunduğunda TextViewtanımlı bir stil uygulamak istediğim bir android uygulamam var .

Bir bulmayı düşündüm textview.setStyle()ama yok. denedim

textview.setTextAppearance();

ama bu çalışmıyor.


1
Bunun mümkün olmadığını bir yerde okudum ... stackoverflow.com/questions/2016249/… . Ancak bazı özellikleri ayrı ayrı ayarlayabilirsiniz.
Floern

1
Denediniz mi: textView.setTextTypeface? developer.android.com/reference/android/widget/…
Jonathan Roth

21
@Falmarri TextView api belgelerine baktınız mı? Öyleyse, belki daha yapıcı bir şey söyleyebilirsin.
Fletch

Yanıtlar:


143

Bunu res/values/style.xmlaşağıdaki gibi yeni bir XML dosyası oluşturarak yaptım :

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

Ayrıca "strings.xml" dosyamda şöyle bir girdim var:

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

Ardından, kodumda Tap olayını o TextView: EDIT: API 23'ten itibaren 'setTextAppearance' kullanımdan kaldırılan bir ClickListener oluşturdum

    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);
                }
            });

Eski haline getirmek için şunu kullanırsınız:

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

2
Aslında bu gölge stilleriyle çalışmaz. Gölgeyi değiştirmek isterseniz, şu şekilde yapmanız gerekir: lockText.setShadowLayer (20, 4, 4, 0xFFFF0000);
Lukas

3
SDK kontrolünden kaçınmak için TextViewCompat.setTextAppearance (myTextView, R.style.myStyle) kullanabilirsiniz;
Justin Fiedler

90

Jonathan'ın önerdiği gibi, textView.setTextTypefaceişleri kullanarak , birkaç saniye önce bir uygulamada kullandım.

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

9
TextView.setTypeface (null, Typeface.BOLD); textView..setTypeface (null, Typeface.ITALIC); textView.setTypeface (null, Typeface.BOLD_ITALIC);
32'de peceps

2
textView.setTypeface (null, Typeface.BOLD) benim için çalıştı. Tabii ki, bunun yerine 1 kullanabilirsiniz, ancak sabitleri manuel olarak girmek iyi bir uygulama değil sanırım. Kitaplıklarda önceden tanımlanmış değişkenleri daha iyi kullanın.
Pijusn

4
İnsanları sabitler yerine ints kullanmaya teşvik etmeyin
Chris.Jenkins

3
İyi bir! Hatam, eski yazı tipimi ilk parametrede gönderiyor olmamdı. Bu yüzden NORMAL -> BOLD'u değiştirdiğimde ancak BOLD -> NORMAL'i değiştirmediğimde çalışıyor. İlk parametrenin boş olabileceğini bilmiyordum! Şimdi benim için iyi çalışıyor!
Felipe

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

Sen onu koddan ayarladın. Yazı biçimi


4

Programlı olarak: Çalışma zamanı

SetTypeface () kullanarak programlı olarak yapabilirsiniz:

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: Tasarım Zamanı

XML olarak da ayarlayabilirsiniz:

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

Umarım bu yardımcı olur

Özetlendi


2

textView.setTypeface(Typeface.DEFAULT_BOLD);en basit yöntem olduğunu buldum .


Bu, Yazı Biçimini değiştirir. OP tarafından belirtilen stil değil .
HBG

Doğru, bu hala en basit yöntemdi - ve hatırladığım kadarıyla tek yöntem - gönderi sırasında. Bu arada, yazı tipini değiştirmeden "stili" kalın olarak değiştirmeyi sağlayan yeni bir API yönteminin eklenmiş olup olmadığından emin değilim. Yanılıyorsam lütfen beni düzeltin.
sfera

1

bu kod satırını deneyin.

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

burada, bu metin görünümünden geçerli Yazı Biçimini alacak ve yeni Yazı Biçimini kullanarak değiştirecektir. Buradaki yeni yazı tipi, DEFAULT_BOLDancak daha fazlasını uygulayabilirsiniz.


kodunuzun neden problemini çözeceğini açıklamayı tercih edersiniz, teşekkürler.
Muhammed Refaat

OP , Yazı Tipini değil stili değiştirmek istiyor .
HBG


0

Ayarlamak istediğiniz stile bağlı olarak, farklı yöntemler kullanmanız gerekir. TextAppearance öğesinin kendi ayarlayıcısı vardır, TypeFace'in kendi ayarlayıcısı vardır, arka planın kendi ayarlayıcısı vardır vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.