为了更改textView的字体,我使用了以下代码:
TextView tv = (TextView) findViewById(R.id.textview);
Typeface font = Typeface.createFromAsset(getAssets(), "SF_Cartoonist_Hand_Bold.ttf");
tv.setTypeface(font);
我想对单选按钮旁边的文本进行类似操作,该如何操作?
为了更改textView的字体,我使用了以下代码:
TextView tv = (TextView) findViewById(R.id.textview);
Typeface font = Typeface.createFromAsset(getAssets(), "SF_Cartoonist_Hand_Bold.ttf");
tv.setTypeface(font);
我想对单选按钮旁边的文本进行类似操作,该如何操作?
您设置与 RadioButton
相邻的文本字体的方式与 TextView
相同:
RadioButton rb = (RadioButton) findViewById(R.id.radiobutton);
Typeface font = Typeface.createFromAsset(getAssets(), "SF_Cartoonist_Hand_Bold.ttf");
rb.setTypeface(font);
我个人喜欢在片段或活动之外处理样式。以下CustomRadioButton类应该可以解决这个问题。
XML布局:
<com.company.package.ui.CustomRadioButton
android:id="@+id/radioBtnAge"
style="@style/RadioButton.One"
app:fontName="SF-Pro-Text-Medium.otf"/>
CustomRadioButton���:
package com.company.package.ui;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
public class CustomRadioButton extends android.support.v7.widget.AppCompatRadioButton {
public CustomRadioButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
public CustomRadioButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public CustomRadioButton(Context context) {
super(context);
init(null);
}
private void init(AttributeSet attrs) {
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CustomTextView);
String fontName = a.getString(R.styleable.CustomTextView_fontName);
if (fontName == null || fontName.isEmpty()) {
fontName = FontCacheHelper.DEFAULT_FONT_NAME;
}
Typeface myTypeface = FontCacheHelper.getInstance().getAppFont(getContext(), fontName);
setTypeface(myTypeface);
a.recycle();
}
}
}
FontCacheHelper 可以有效管理字体(参考:https://slothdevelopers.wordpress.com/2014/05/11/custom-fonts-in-textview-and-fontcache/)
package com.company.package.util;
import android.content.Context;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
public class FontCacheHelper {
private static final String FEATURE_FONT_PATH = "Fonts/";
private static final String APP_FONT_PATH = "Fonts/App/";
public static final String DEFAULT_FONT_NAME = "SF-Pro-Text-Medium.otf";
private static FontCacheHelper fontCacheHelper;
private Map<String, Typeface> fontMap = new HashMap<>();
public static FontCacheHelper getInstance() {
if (fontCacheHelper == null) {
fontCacheHelper = new FontCacheHelper();
}
return fontCacheHelper;
}
public
@NonNull
Typeface getAppFont(@NonNull Context context, @NonNull String fontName) {
String fontPath = getAppFontFilePath(fontName);
return getFontByPath(context, fontPath);
}
public
@NonNull
Typeface getFeatureFont(@NonNull Context context, @NonNull String fontName) {
String fontPath = getFeatureFontFilePath(fontName);
return getFontByPath(context, fontPath);
}
public
@NonNull
Typeface getFontByPath(@NonNull Context context, @NonNull String fontPath) {
if (fontMap.containsKey(fontPath)) {
return fontMap.get(fontPath);
} else {
Typeface typeface;
if (fontPath.isEmpty()) {
typeface = Typeface.DEFAULT;
} else {
typeface = Typeface.createFromAsset(context.getAssets(), fontPath);
if (typeface == null) {
typeface = Typeface.DEFAULT;
}
}
fontMap.put(fontPath, typeface);
return typeface;
}
}
public
@NonNull
String getDefaultFontFilePath() {
return APP_FONT_PATH + DEFAULT_FONT_NAME;
}
private
@NonNull
String getAppFontFilePath(@NonNull String fontName) {
return APP_FONT_PATH + fontName;
}
private
@NonNull
String getFeatureFontFilePath(@NonNull String fontName) {
return FEATURE_FONT_PATH + fontName;
}
public
@NonNull
String getFontName(@NonNull Typeface typeface) {
for (Map.Entry<String, Typeface> entry : fontMap.entrySet()) {
if (entry.getValue().equals(typeface)) {
return entry.getKey();
}
}
return "";
}
}
Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);
val typeface =ResourcesCompat.getFont(context, R.font.myfont)
radioButton.typeface= typeface
正如我在这个答案中所描述的: https://dev59.com/12DVa4cB1Zd3GeqPf7bL#65262349
你可以使用这行代码:
app:fontFamily="@font/myFontFamily"
RadioButton
有一个setTypeface()
方法。 - Piovezan