Что эквивалентно "android:fontFamily="sans-serif-light"в коде Java?
Мой вопрос довольно прост:
В каждом моем текстовом просмотре я в настоящее время использую атрибут
android:fontFamily="sans-serif-light"
чтобы обеспечить великолепный вид на пост-устройств HC.
К сожалению, это не работает с каждым виджетом, и для моих спиннеров мне нужно перезаписать адаптер.
@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: нет, я не хочу помещать гарнитуру в папку активов, я просто хочу использовать системную.
5 ответов
Это должно быть возможно с setTypeface()
а также Typeface.create()
:
convertView.setTypeface(Typeface.create("sans-serif-light", Typeface.NORMAL));
Смотрите Документы:
Создайте объект гарнитуры с указанием фамилии и информации о стиле опции. Если для имени передано значение NULL, будет выбран шрифт "по умолчанию". Полученный объект гарнитуры может быть запрошен (
getStyle()
) узнать, каковы его "настоящие" характеристики стиля.
Обратите внимание, что чрезмерное использование Typeface.create()
это плохо для вашей памяти, как указано в этом комментарии. Предлагаемый Hashtable является хорошим решением, но вы должны немного его изменить, поскольку вы не создаете свою гарнитуру из ресурса.
Android 4.1 (API уровня 16) и библиотека поддержки 26 и выше
Если вы используете res -> папку шрифтов, вы можете использовать как это
val typeface = ResourcesCompat.getFont(Context, R.font.YOUR_FONT)
TextView.setTypeface(typeface)
Динамически вы можете установить 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, вы можете больше узнать о шрифте по умолчанию в этом семействе шрифтов по умолчанию
На мой взгляд, все еще есть способ применять системные шрифты программно на 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);
}
Вариант 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.
Это было бы возможно с помощью
setTypeface(Typeface tf, int style)
метод TextView
учебный класс.
spinner_text.setTypeface(Typeface.SANS_SERIF,Typeface.NORMAL);