Что эквивалентно "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: Нет, я не хочу помещать шрифт в папку с ресурсами, я просто хочу использовать системный.
Ответы
Ответ 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.