如何更改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);
}
}
}
字体和路径正常工作。我将它用于我的自定义文本视图。
答案 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);
}
}
}
}