Java kodundaki “android: fontFamily =” sans-serif-light ”ile eşdeğeri nedir?


106

Sorum oldukça basit:

Her metin görünümümde şu anda özniteliği kullanıyorum

android:fontFamily="sans-serif-light"

HC sonrası cihazlarda muhteşem bir görünüm sağlamak için.

Ne yazık ki, bu her widget ile çalışmıyor ve Spinners'ım için Adaptörün üzerine yazmam gerekiyor.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //You can use the new tf here.

    if(convertView == null || convertView.getTag() == null) {
        // new view - populate 
        convertView = inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
        convertView.setTag(new Object());
    }

    CheckedTextView spinner_text=(CheckedTextView) convertView.findViewById(android.R.id.text1);
    //Typeface should be set here...
    return spinner_text;
    }
}

Öyleyse, kodla tam olarak aynı sonucu almanın bir yolu var mı?

Not: Hayır, varlık klasörüne bir yazı tipi koymak istemiyorum, sadece bir sistemi kullanmak istiyorum.

Yanıtlar:


169

O ile mümkün olmalıdır setTypeface()ve Typeface.create():

convertView.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));

Dokümanlara Bakın :

Bir aile adı ve seçenek stili bilgisi verilen bir yazı tipi nesnesi oluşturun. Ad için null geçilirse, "varsayılan" yazı tipi seçilecektir. Ortaya çıkan yazı tipi nesnesi getStyle(), "gerçek" stil özelliklerinin ne olduğunu keşfetmek için sorgulanabilir ( ).

Bu yorumdaTypeface.create() belirtildiği gibi aşırı kullanımın hafızanız için kötü olduğunu unutmayın . Önerilen Hashtable'a iyi bir çözümdür, ama bunu bir varlıktan senin yazı tipini yaratmak değil çünkü biraz değiştirmek zorunda.


2
Çok sayıda dönen öğeniz varsa lütfen bellek sorunlarına dikkat edin - cevabımı biraz güncelledim.
saschoar

44

Android 4.1 (API Düzeyi 16) ve Destek Kitaplığı 26 ve üzeri

Res -> font klasörü kullanıyorsanız, bunun gibi kullanabilirsiniz

  val typeface = ResourcesCompat.getFont(Context, R.font.YOUR_FONT)
  TextView.setTypeface(typeface)

20

Bence herhangi bir bellek sorunu yaşamadan sistem yazı tiplerini programatik olarak TextView üzerinde uygulamanın bir yolu var ve bu textview.setTextAppearanceyöntem kullanıyor :

<style name="styleA">
    <item name="android:fontFamily">sans-serif</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="styleB">
    <item name="android:fontFamily">sans-serif-light</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">?android:attr/textColorTertiary</item>
</style>


if(condition){
    textView.setTextAppearance(context,R.style.styleA);
}else{
    textView.setTextAppearance(context,R.style.styleB);
}

2
android:fontFamilyAPI 16 gerektirir.
CoolMind

2
Kullanın TextViewCompat.setTextAppearance(textView, R.style.styleA).
CoolMind

19

Dinamik olarak bunu kullanarak fontfamily'i xml'de android: fontFamily'e benzer şekilde ayarlayabilirsiniz,

For Custom font:

 TextView tv = ((TextView) v.findViewById(R.id.select_item_title));
 Typeface face=Typeface.createFromAsset(getAssets(),"fonts/mycustomfont.ttf"); 
 tv.setTypeface(face);

For Default font:

 tv.setTypeface(Typeface.create("sans-serif-medium",Typeface.NORMAL));

Bunlar, kullanılan varsayılan yazı tipi ailesinin listesidir, bunlardan herhangi birini çift tırnak dizesi "sans-serif-medium" ile değiştirerek kullanın

FONT FAMILY                    TTF FILE                    

1  casual                      ComingSoon.ttf              
2  cursive                     DancingScript-Regular.ttf   
3  monospace                   DroidSansMono.ttf           
4  sans-serif                  Roboto-Regular.ttf          
5  sans-serif-black            Roboto-Black.ttf            
6  sans-serif-condensed        RobotoCondensed-Regular.ttf 
7  sans-serif-condensed-light  RobotoCondensed-Light.ttf   
8  sans-serif-light            Roboto-Light.ttf            
9  sans-serif-medium           Roboto-Medium.ttf           
10  sans-serif-smallcaps       CarroisGothicSC-Regular.ttf 
11  sans-serif-thin            Roboto-Thin.ttf             
12  serif                      NotoSerif-Regular.ttf       
13  serif-monospace            CutiveMono.ttf              

"mycustomfont.ttf" ttf dosyasıdır. Yol olacak src / varlık / yazı / mycustomfont.ttf bunun içinde varsayılan yazı hakkında daha başvurabilir, Varsayılan yazı ailesi


13

Seçenek 1 - API 26 ve üzeri

// Jave
Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);

// Kotlin
val typeface = resources.getFont(R.font.myfont)
textView.typeface = typeface

Seçenek 2 - API 16 ve üzeri

// Java
Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);

// Kotlin
val typeface = ResourcesCompat.getFont(context, R.font.myfont)

Android Developers Guide'da tüm kullanım süresine bakın .


6

Kullanarak mümkün olacaktır

setTypeface(Typeface tf, int style)TextViewsınıf yöntemi .

spinner_text.setTypeface(Typeface.SANS_SERIF,Typeface.NORMAL);

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.