Подтвердить что ты не робот

Что эквивалентно "android: fontFamily =" sans-serif-light "в Java-коде?

Мой вопрос довольно прост:

В каждом моем текстовом представлении я в настоящее время использую атрибут

android:fontFamily="sans-serif-light"

чтобы обеспечить великолепный вид почтовых устройств HC.

К сожалению, это не работает с каждым виджетами и для моих Spinners, мне нужно перезаписать адаптер.

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

Итак, есть ли способ получить точно такой же результат с помощью кода?

PS: Нет, я не хочу помещать шрифт в папку с ресурсами, я просто хочу использовать системный.

4b9b3361

Ответ 1

Это должно быть возможно с setTypeface() и Typeface.create():

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

Смотрите Документы:

Создайте объект шрифта с именем семьи и стилем опций Информация. Если для имени передано значение null, то шрифт по умолчанию будут выбраны. Полученный объект шрифта может быть запрошен (getStyle()), чтобы узнать, каковы его "реальные" характеристики стиля.

Обратите внимание, что чрезмерное использование Typeface.create() плохо для вашей памяти, как указано в этом комментарии. предложил Hashtable - это хорошее решение, но вам нужно немного его изменить, так как вы не создаете свой шрифт из актива.

Ответ 2

Android 4.1 (API уровня 16) и библиотека поддержки 26 и выше

Если вы используете res → папку шрифтов, вы можете использовать как это

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

Ответ 3

По-моему, по-прежнему существует способ применения системных шрифтов программно в TextView без каких-либо проблем с памятью и который использует метод textview.setTextAppearance:

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

Ответ 4

Динамически вы можете установить fontfamily аналогично Android: fontFamily в XML, используя это,

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

Это список используемого семейства шрифтов, используйте любой из них, заменив строку двойных кавычек "sans-serif-medium"

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. Путь будет в src/assets/fonts/mycustomfont.ttf, вы можете больше узнать о шрифте по умолчанию в этом семействе шрифтов по умолчанию

Ответ 5

Было бы возможно, используя

setTypeface(Typeface tf, int style) метод класса TextView.

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

Ответ 6

Вариант 1 - API 26 и выше

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

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

Вариант 2 - API 16 и выше

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

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

Проверьте полное истечение срока в Руководстве для разработчиков Android.