Установить шрифт во время выполнения, Textview
Как установить шрифт в textview, который создается во время выполнения?
i создал textview
Textview tv = new TextView(this);
tv.setTextSize(20);
как я могу изменить размер
Я хочу установить стиль шрифта в "Вердану".
Как это сделать?
С уважением
Шишир
Ответы
Ответ 1
Чтобы установить встроенный шрифт во время выполнения:
-
Прежде всего, для изменения шрифта, используется Typeface.
-
Теперь, at Run-Time
, чтобы установить шрифт, используйте setTypeface(Typeface)
из кода Java
-
at Design-Time
, чтобы установить шрифт, используйте android:typeface="serif"
Например:
<TextView android:text="@+id/TextView01"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30px"
android:textStyle="italic"
android:typeface="serif" />
Чтобы задать пользовательские шрифты в приложении Android
Для этого просто создайте активы/папку в корне проекта и поместите в свои объекты шрифты (в форме TrueType или TTF). Например, вы можете создать assets/fonts/
и разместить там TTF файлы:
TextView tv=(TextView)findViewById(R.id.custom);
Typeface face=Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf");
tv.setTypeface(face);
Ответ 2
У вас может быть шрифт .ttf в папке вашего ресурса. Скажем, имя шрифта "default.ttf", и теперь вам нужно написать ниже 2 строки кода
TextView text = new TextView(this);
text.setTypeface(Typeface.createFromAsset(getAssets(), "default.ttf"));
Вы также должны быть осторожны, потому что разные шрифты имеют разные размеры. Вам может потребоваться установить размер как:
text.setTextSize(20);
Ответ 3
Вам нужно использовать Typeface:
- добавить шрифт, который вы хотите использовать в своем проекте в качестве актива.
-
создать объект Typeface с помощью этого шрифта:
Typeface myFont = Typeface.createFromAsset(getAssets(), "fonts/MyFont.ttf");
-
установите тип шрифта для объекта, который вы хотите настроить:
TextView myTextView = (TextView)findViewById(R.id.my_text_view);
myTextView.setTypeface(myFont);
Ответ 4
Вот небольшой класс утилиты
public class TypefaceHelper {
public static void setViewGroupTypeface(ViewGroup container, Typeface typeface) {
final int children = container.getChildCount();
for (int i = 0; i < children; i++)
View child = container.getChildAt(i);
if (child instanceof TextView) {
setTextViewTypeface((TextView) child, typeface);
} else if (child instanceof ViewGroup) {
setViewGroupTypeface((ViewGroup) child, typeface);
}
}
}
public static void setTextViewTypeface(TextView textView, Typeface typeface) {
textView.setTypeface(typeface);
}
}
Для таких вещей, как Spinner
или ListView
(т.е. любой тип AdapterView
), которые генерируют своих детей из адаптера, вам нужно будет установить шрифт каждого элемента View
в getView
(или аналогичном ) метод адаптера. Это связано с тем, что представления могут быть созданы по мере необходимости, поэтому установка Typeface
в onCreate
не будет работать должным образом.
Ответ 5
Динамически вы можете установить 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
Ответ 6
Вы можете использовать следующий код для установки всего текста на определенный шрифт во время выполнения. Просто вызовите метод setViewGroupFont
в конце вашего действия onCreate
или всякий раз, когда вы динамически создаете новые представления:
private static final String FONT_NAME = "fonts/Roboto-Regular.ttf";
private static Typeface m_font = null;
public static Typeface getFont(Context p_context)
{
if (null == m_font && null != p_context)
{
m_font = Typeface.createFromAsset(p_context.getApplicationContext().getAssets(), FONT_NAME);
}
return m_font;
}
public static void setViewGroupFont(ViewGroup p_viewGroup)
{
if (null != p_viewGroup)
{
for (int currChildIndex = 0; currChildIndex < p_viewGroup.getChildCount(); currChildIndex++)
{
View currChildView = p_viewGroup.getChildAt(currChildIndex);
if (ViewGroup.class.isInstance(currChildView))
{
setViewGroupFont((ViewGroup) currChildView);
}
else
{
try
{
Method setTypefaceMethod = currChildView.getClass().getMethod("setTypeface", Typeface.class);
setTypefaceMethod.invoke(currChildView, getFont(p_viewGroup.getContext()));
}
catch (NoSuchMethodException ex)
{
// Do nothing
}
catch (Exception ex)
{
// Unexpected error setting font
}
}
}
}
}