Установка typeFace для NumberPicker
Как изменить тип шрифта в NumberPicker. Я пытаюсь сделать так, но шрифт не меняется. Любая идея? PS: цвет и textSize изменены.
public class NumberPicker extends android.widget.NumberPicker {
private Context context;
private Typeface tfs;
public NumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
tfs = Typeface.createFromAsset(context.getAssets(),"fonts/font.ttf");
}
@Override
public void addView(View child) {
super.addView(child);
updateView(child);
}
@Override
public void addView(View child, int index, android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
updateView(child);
}
@Override
public void addView(View child, android.view.ViewGroup.LayoutParams params) {
super.addView(child, params);
updateView(child);
}
private void updateView(View view) {
if(view instanceof EditText){
((EditText) view).setTypeface(tfs);
((EditText) view).setTextSize(25);
((EditText) view).setTextColor(Color.RED);
}
}
}
Шрифт и путь работают правильно. Я использую его для своих пользовательских видов текста.
4 ответа
Добавьте ниже стиль в свой style.xml.
<style name="NumberPickerCustomText">
<item name="android:textSize">22sp</item> // add if you want to change size
<item name="android:fontFamily">@font/lato_regular</item> // add font (this font folder is present in res folder)
</style>
Непосредственно добавьте этот стиль в средство выбора номера в формате XML.
android:theme="@style/NumberPickerCustomText"
Я исправляю ту же проблему с помощью набора Typeface
данные в addView
как код ниже:
public class CustomNumberPicker extends android.widget.NumberPicker {
Typeface type;
public CustomNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void addView(View child) {
super.addView(child);
updateView(child);
}
@Override
public void addView(View child, int index,
android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
type = Typeface.createFromAsset(getContext().getAssets(),
"fonts/b_yekan.ttf");
updateView(child);
}
@Override
public void addView(View child, android.view.ViewGroup.LayoutParams params) {
super.addView(child, params);
type = Typeface.createFromAsset(getContext().getAssets(),
"fonts/b_yekan.ttf");
updateView(child);
}
private void updateView(View view) {
if (view instanceof EditText) {
((EditText) view).setTypeface(type);
((EditText) view).setTextSize(25);
((EditText) view).setTextColor(getResources().getColor(
R.color.text_dark_grey));
}
}
}
package com.harman.settings.dateandtime;
import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import com.harman.settings.R;
public class XNumberPicker extends android.widget.NumberPicker {
public XNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void addView(View child) {
super.addView(child);
updateView(child);
}
@Override
public void addView(View child, int index, android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
updateView(child);
}
@Override
public void addView(View child, android.view.ViewGroup.LayoutParams params) {
super.addView(child, params);
updateView(child);
}
private void updateView(View view) {
if (view instanceof EditText) {
Typeface typeface = null;
try {
typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + getContext().getString(R.string.lato_bold));
} catch (Exception e) {
Log.e("XNumberPicker", "Unable to load typeface: " + e.getMessage());
}
if (typeface != null) {
((EditText) view).setTypeface(typeface);
}
}
}
}
Это не очень аккуратное решение, но если вы установите TypeFace в updateView, оно работает:-|
private void updateView(View view) {
Typeface tfs = Typeface.createFromAsset(context.getAssets(),"fonts/font.ttf");
if (view instanceof EditText) {
((EditText) view).setTypeface(tfs);
((EditText) view).setTextSize(25);
((EditText) view).setTextColor(getResources().getColor(
R.color.text_dark_grey));
}
}
В вашем updateView(View view)
метод
Решение 1
private void updateView(View view) {
if(view instanceof EditText){
((EditText) view).setTypeface(Typeface.SERIF);
((EditText) view).setTextSize(25);
((EditText) view).setTextColor(Color.RED);
}
Другие шрифты смотрите здесь.
Решение 2
Если у вас есть свой .ttf
файл для шрифта, создайте папку шрифтов в папке активов и поместите .ttf
файл шрифта, затем внутри onCreate()
функция записи:
Typeface type = Typeface.createFromAsset(getAssets(),"fonts/yours_font.ttf");
((EditText) view).setTypeface(type);
Решение 3
Направьте этот ТАК вопрос для замечательного способа достижения того, чего вы хотите. Надеюсь, это поможет.
Извините за поздний ответ, но так я добился того, что вы искали. Я использовал это, чтобы использовать MaterialNumberPickers, а не стоковые NumberPickers. В ReadMe этого репозитория github есть инструкции по добавлению зависимостей Gradle, поэтому я не буду их здесь включать.
Затем я устанавливаю шрифт MaterialNumberPicker в xml следующим образом:
<com.github.stephenvinouze.materialnumberpickercore.MaterialNumberPicker
android:id="@+id/np_timer_hour"
.
.
.
app:mnpFontname="monsterrat_regular.ttf"
app:mnpTextColor="@color/primaryTextColor"
app:mnpTextSize="28sp"/>
Кроме того, я разместил monsterrat-normal.ttf под app>src>main>assets>fonts, как указано здесь.