Пользовательские шрифты в Android
Я уже прочитал несколько статей и искал в Google, но я этого не сделал.
Моя проблема касается шрифта.
В Android в "android:typeface"
есть только 4 атрибута: Normal, Sans, Serif, Monospace.
Итак, что мне нужно сделать, чтобы использовать "Вердану" в моем приложении?
Пожалуйста, предложите мне правильный способ использования этого шрифта в приложении для Android.
Ответы
Ответ 1
Это простой пример... создайте папку в корне вашего проекта под названием assets/fonts/
, затем вставьте файл шрифта TTF (в данном случае Verdana.ttf). Затем, если вы хотите применить этот шрифт, скажем a TextView
, выполните следующие действия:
import android.graphics.Typeface;
public class FontSampler extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
TextView tv=(TextView)findViewById(R.id.custom);
Typeface face=Typeface.createFromAsset(getAssets(),
"fonts/Verdana.ttf");
tv.setTypeface(face);
}
}
Этот пример был взят из книги ComonsWare (написанной Марком Мерфи). Вы можете загрузить полный пример из GitHub.
Ответ 2
Вы можете использовать PixlUI в https://github.com/neopixl/PixlUI
импортируйте свой .jar и используйте его в XML
<com.neopixl.pixlui.components.textview.TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
pixlui:typeface="GearedSlab.ttf" />
Ответ 3
Ну!!
Этот вопрос довольно старый, но все же, если кто-то ищет ответ (в 2015 году) о том, как применять собственный шрифт ко всем текстовым изображениям через xml-код, см. Ниже:
Первая:
нам нужно добавить пользовательский шрифт внутри папки с ресурсами внутри вашего каталога приложений:
.ttf или .otf работают в случае Android
Второе:
Создайте класс CustomTextView, который расширяет TextView, как показано ниже:
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setTypeface(Typeface tf) {
super.setTypeface(FontCache.getFont(getContext(),"fonts/<font_name>"));
}
}
Третье:
Класс FontCache используется внутри метода CustomTextView setTypeface(). Целью является базовое кэширование шрифтов с использованием HashMap:
public class FontCache {
private static Map<String,Typeface> fontMap = new HashMap<String,Typeface>();
public static Typeface getFont(Context context,String fontname){
if(fontMap.containsKey(fontname)){
return fontMap.get(fontname);
}
else{
Typeface tf = Typeface.createFromAsset(context.getAssets(),fontname);
fontMap.put(fontname,tf);
return tf;
}
}
}
Четвертый: [Заключительный шаг]
Все, что мы делаем сейчас, это использование CustomTextView непосредственно внутри нашего XML файла, где требуется текстовое представление пользовательского шрифта:
<<package_name>.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Custom Font Text"
android:textSize ="18sp"
android:textAppearance="?android:textAppearanceSmall"
android:id="@+id/custom_txt"
/>
Извините, если это уже было опубликовано где-то на SO. Просто подумал поделиться, если это кому-то поможет!!
Ответ 4
Вы можете использовать простую стороннюю библиотеку EasyFonts, чтобы задать набор настраиваемых шрифтов для вашего TextView
. Используя эту библиотеку, вам не придется беспокоиться о загрузке и добавлении шрифтов в папку assets/fonts. Также о создании объекта Typeface.
В этой библиотеке нет шрифта Verdana Font.
Но укажите следующие грани шрифтов. Что бы вы хотели использовать.
- Roboto
- Droid Serif
- Droid Robot
- Свобода
- Fun Raiser
- Android Nation
- Зеленый авокадо
- Признание
Просто:
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));
Я автор этой библиотеки.
Ответ 5
Чтобы изменить (пользовательский) шрифт вашего приложения по всему миру, просмотрите Calligraphy
Просто добавьте каллиграфию в свой gradle.build и добавьте следующий фрагмент к вашему Application.onCreate()
:
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/MyCustomFont.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
и в каждом из действий добавьте следующее:
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
Это все, что вам нужно сделать, чтобы изменить шрифт глобально в вашем приложении. Взгляните на документы для более подробной информации.
Ответ 6
// My example show you how to change fonts into a normal textView or list view
create a fonts folder into your assets dir of android and copy your custom font in that ..
assets/fonts/monaco.ttf
// Font path
String fontPath = "fonts/monaco.ttf";
// Loading Font Face
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
// CASE 1 : Inside your list view
holder.name = (TextView) convertView
.findViewById(R.id.textView_cityName);
// set name of text in each row
holder.name.setText(CitiesNames.get(position));
// set the type of font you want to set
holder.name.setTypeface(tf);
// CASE 2 : Inside your text view
TextView tx = (TextView)findViewById(R.id.textview1);
tx.setTypeface(tf);
//vKj
Ответ 7
TextView textView = (Textview) findViewById(R.id.mytext);
Typeface face=Typeface.createFromAsset(getAssets(),
"fonts/Verdana.ttf");
textView.setTypeFace(face);