Android: правильный способ использования пользовательского шрифта в

Как правильно использовать шрифт в Android? Я вижу много примеров использования пользовательского тега XML для текстового представления. Я попытался установить в Java обычный текстовый вид, и он отлично работает, так в чем причина использования настраиваемых полей?


person user3553099    schedule 20.04.2014    source источник


Ответы (1)


При использовании пользовательского шрифта лучше всего добавить его в каталог /assets в вашем проекте. Достаточно легко сделать следующее:

TextView customTypefaceTextView = (TextView) findViewById(R.id.customTypefaceTextView);
Typeface customTypeface = Typeface.createFromAsset(getAssets(), "Custom_Typeface.ttf");
customTypefaceTextView.setTypeface(customTypeface);

Просто помните, что поиск ваших активов будет связан с текущим Context, поэтому, если вы используете пользовательские шрифты в Fragment vs. Activity, вы захотите вызвать getActivity().getAssets() вместо просто getAssets().

Это ссылка на краткий совет от: http://code.tutsplus.com/tutorials/customize-android-fonts--mobile-1601

Кроме того, может быть более практичным создать класс, который extends TextView поможет вам получить более практическую реализацию пользовательского шрифта, который можно использовать для TextView, к которым вы хотите добавить собственный шрифт, например:

public class CustomTitleTextView extends TextView {

private Context m_classContext          = null;
private Typeface m_customTypeFace       = null;

    // Default Constructor
public CustomTitleTextView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    this.m_classContext = context;
    createRobotoTitleTextView();
}

    // Default Constructor
public CustomTitleTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub
    this.m_classContext = context;
    createRobotoTitleTextView();
}

    // Default Constructor
public CustomTitleTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
    this.m_classContext = context;
    createRobotoTitleTextView();
}

    // Adds the Typeface to the TextView
private void createRobotoTitleTextView()
{
    m_customTypeFace = Typeface.createFromAsset(m_classContext.getAssets(), "Roboto-Thin.ttf");
    this.setTypeface(m_customTypeFace);

}


}

И тогда вы можете использовать это в XML в любом макете

<packagename.CustomTitleTextView
  android:id="@+id/customTitleTextView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/>

Обновить

Вот несколько способов, которыми я успешно реализовал пользовательские шрифты. Пример, показывающий, как добавить пользовательский TextView через extends TextView, а затем добавить его в XML не обязательно, он просто дает основу того, как создать ваш TextView как повторно используемый объект, а не делать это динамически в вашем действии или фрагменте.

Удачи!

person kandroidj    schedule 20.04.2014
comment
Обратите внимание, что на некоторых уровнях Android шрифты, созданные из активов, не кэшируются и не используются повторно должным образом. Если вы собираетесь использовать этот шрифт в нескольких областях, вам следует включить механизм кэширования, чтобы избежать утечек памяти, например тот, который опубликован здесь stackoverflow. com/a/17283657/3194316 - person rperryng; 20.04.2014
comment
ну, я загружаю их именно так, но без <packagename.CustomTitleTextView `android:id=@+id/customTitleTextView` `android:layout_width=wrap_content` `android:layout_height=wrap_content/›` так зачем они мне нужны? у меня есть обычное текстовое представление, такое как ` ‹TextView android:text=@string/play android:textStyle=bold android:textColor=#fff android:textSize=@dimen/font2 android:layout_width=wrap_content android:layout_height=wrap_content/› ` - person user3553099; 20.04.2014
comment
Это просто альтернативный способ сделать это, чтобы ваш код можно было использовать повторно. Вы можете дополнительно создать вспомогательный метод, который принимает ваше текстовое представление в качестве параметра и вызывает texview.setTypeface(customTypeFace); ваш шрифт не отображается? Если это так, пожалуйста, добавьте свой код в сообщение, чтобы я мог помочь решить эту проблему. Я покажу вам несколько распространенных способов использования пользовательских шрифтов. - person kandroidj; 20.04.2014