将typeFace设置为NumberPicker

时间:2014-09-11 18:27:25

标签: android typeface numberpicker

如何更改NumberPicker中的字体类型。我尝试这样做,但字体不变。任何的想法? P.S:color和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);
         }
       }

     }

字体和路径正常工作。我将它用于我的自定义文本视图。

6 个答案:

答案 0 :(得分:3)

在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"

答案 1 :(得分:2)

我通过设置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));
    }

}

}

答案 2 :(得分:0)

使用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);
     }

对于其他字体,请参阅here

解决方案2

如果您有自己的.ttf字体文件,请在assets文件夹中创建一个fonts文件夹并放入.ttf字体文件,然后在onCreate()函数内写:

Typeface type = Typeface.createFromAsset(getAssets(),"fonts/yours_font.ttf"); 
((EditText) view).setTypeface(type);

解决方案3

请参考this SO question以获得实现目标的绝佳方式。希望这会有所帮助。

答案 3 :(得分:0)

这不是一个非常简洁的解决方案,但是如果你在updateView中设置TypeFace,它可以工作: - |

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));
    }
}

答案 4 :(得分:0)

对不起,您的回复很晚,但这就是我实现您想要的结果的方式。我使用this来使用MaterialNumberPickers而不是库存NumberPickers。该github存储库的自述文件中有关于如何添加Gradle依赖项的说明,因此在此不再赘述。

然后我按如下所示在xml中设置MaterialNumberPicker的字体:

<com.github.stephenvinouze.materialnumberpickercore.MaterialNumberPicker
        android:id="@+id/np_timer_hour"
        .
        .
        .
        app:mnpFontname="monsterrat_regular.ttf"
        app:mnpTextColor="@color/primaryTextColor"
        app:mnpTextSize="28sp"/>

另外,我按照here的指示,将monsterrat-regular.ttf放置在app> src> main> assets> fonts下。

答案 5 :(得分:0)

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);
            }
        }
    }
}