Android - Как установить собственный шрифт для всего приложения
Возможный дубликат:
Можно ли установить шрифт для всего приложения?
Мне нужно установить собственный шрифт (формат.ttf) для всего приложения, как я могу это сделать? Из Manifest или XML будет лучшим вариантом, если это возможно
5 ответов
РЕДАКТИРОВАТЬ Сентябрь 2014:
Для тех, кто все еще видит этот старый ужасный ответ, настоящий, хороший ответ здесь:
/questions/9699352/mozhno-li-ustanovit-sobstvennyij-shrift-dlya-vsego-prilozheniya/9699418#9699418
OLD:
Ваша лучшая ставка будет такой:
Так
TextView text = (TextView) findViewById(R.id.custom_font);
Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf");
text.setTypeface(font);
С вашим.ttf в корне папки "assets".
Вы можете сделать это так. Создайте собственный текстовый вид и используйте его везде
public class MyTextView extends android.widget.TextView
{
public MyTextView(Context context)
{
this(context, null);
}
public MyTextView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public MyTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs);
if (this.isInEditMode()) return ;
final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle);
final String customFont = a.getString(R.styleable.SomeStyle_font);
//Build a custom typeface-cache here!
this.setTypeface(
Typeface.createFromAsset(context.getAssets(), customFont)
);
}
}
Добавьте это в attrs.xml
<declare-styleable name="SomeStyle">
<attr name="font" format="string" />
</declare-styleable>
Затем в вашей теме сделайте это: Это позволит убедиться, что все текстовые представления будут использовать стиль MyTextView.
<item name="android:textViewStyle">@style/MyTextView</item>
И теперь мы можем определить ваш собственный шрифт, используя ваш собственный атрибут в этом стиле.
<style name="MyTextView" parent="@android:style/Widget.TextView">
<item name="font">MyPathToFontInAssets.ttf</item>
</style>
Поэтому всякий раз, когда вы используете MyTextView в проекте, он будет иметь свой собственный шрифт.
ВАЖНО: гарнитуры не кэшируются, поэтому, если вы планируете использовать этот код, вы должны также создать собственный кэш гарнитуры, чтобы вы могли повторно использовать эту гарнитуру для всех текстовых представлений. Это значительно ускорит приложение!
ОБНОВЛЕНИЕ: Как говорил Амир, это почти то же самое, что и пользовательские шрифты и макеты XML (Android), но я также использую стилизацию Android, чтобы автоматически использовать их во всех текстовых представлениях в приложении.
Создайте подкласс TextView и используйте его везде
public class RobotoTextView extends TextView {
public RobotoTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public RobotoTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public RobotoTextView(Context context) {
super(context);
init();
}
private void init() {
if (!isInEditMode()) {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
setTypeface(tf);
}
}
}
использование
<com.test.RobotoTextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
в коде Java вы можете привести его к TextView
TextView tv=(TextView)findViewById(R.id.custom);
Typeface face=Typeface.createFromAsset(getAssets(),
"fonts/Verdana.ttf");
tv.setTypeface(face);
поместите файл шрифта в папку шрифтов в /res/
Как мой ответ, если это полезно...
Вы можете расширить TextView, как предложено здесь, и установить свой шрифт, а затем использовать его во всем приложении.