我是android的初学者,我想改变一些控制字体。
第一种方式:
TextView tx = (TextView)findViewById(R.id.textview1);
Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/abc.ttf");
tx.setTypeface(custom_font)
这种方式并不好,因为你必须找到所有控件来设置字体
第二种方式: 创建从目标控件扩展的自定义控件public class TextViewWithFont extends TextView {
public TextViewWithFont(Context context, AttributeSet attrs) {
super(context, attrs);
Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/abc.ttf")
this.setTypeface(custom_font);
}
public TextViewWithFont(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/abc.ttf")
this.setTypeface(custom_font);
}
public TextViewWithFont(Context context) {
super(context);
Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/abc.ttf")
this.setTypeface(custom_font);
}
第三种方式:使用书法图书馆
所以大家好吗?哪一个更好,你知道改变字体的其他方法吗?
答案 0 :(得分:3)
这里我只是给出一些提示,如何在XML布局中使用自定义字体。
在本例中,我使用Roboto字体,您可以根据您的要求进行更改。
首先,在您的attr中创建自定义字体样式,
<declare-styleable name="TCTextView">
<attr name="fontType">
<enum name="RobotoBold" value="0" />
<enum name="RobotoBoldItalic" value="1" />
</attr>
</declare-styleable>
像这样创建自定义TextView,
public class MKTextView extends TextView {
public MKTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
public MKTextView(Context context) {
super(context);
}
public MKTextView(Context context, AttributeSet attrs) {
super(context, attrs, 0);
init(context, attrs);
}
/**
* To initialize the default value to the component.
*
* @param context
* @param attrs
*/
private void init(Context context, AttributeSet attrs) {
Typeface typeface = FontUtil.getTCFont(context, attrs);
if (typeface != null) {
setTypeface(typeface);
}
}
}
使用此Helper Util类获取和设置自定义字体
public class FontUtil {
/**
* To set the custom font based on the attribute settings.
*
* @param ctx
* Context
* @param attrs
* attribute setting for the components.
*
* @return {@link Typeface}
*/
public static Typeface getTCFont(Context ctx, AttributeSet attrs) {
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.MKTextView);
int value = a.getInt(R.styleable.MKTextView_fontType, 0);
final String customFont = getFontName(value);
a.recycle();
return getTCFont(ctx, customFont);
}
/**
* Get the Font name in assert folder based in {@link Fonts}
*
* @param fonts
* {@link Fonts}
*
* @return Font name in assert folder
*/
private static String getFontName(int fonts) {
final String customFont;
switch (fonts) {
case 0:
customFont = "Roboto-Bold.ttf";
break;
case 1:
customFont = "Roboto-BoldItalic.ttf";
break;
default:
customFont = "Roboto-BoldItalic.ttf";
break;
}
return customFont;
}
/**
* To get the {@link Typeface} based on the font type(in asserts/fonts).
*
* @param ctx
* Context
* @param asset
* font name in fonts folder
*
* @return {@link Typeface}
*/
private static Typeface getTCFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = Typeface.createFromAsset(ctx.getAssets(), "fonts/" + asset);
} catch (Exception e) {
return null;
}
return tf;
}
}
您可以像这样使用XML布局,
<in.muthu.stackoverflow.font.MKTextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text"
app:fontType="RobotoBold"/>
答案 1 :(得分:2)
这是应用程序类
public class AppController extends Application {
public static Typeface customTF;
@Override
public void onCreate() {
super.onCreate();
customTF = Typeface.createFromAsset(getAssets(), "fonts/custom_font.ttf");
}
}
将类名添加到清单文件
中的应用程序标记<application
android:name=".AppController"
...
...
>
使用字体
tvTitle.setTypeface(AppController.customTF);