Установка 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, как указано здесь.

Другие вопросы по тегам