要更改我使用的 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);
我想为单选按钮旁边的文本做类似的事情,我该怎么做?
您将字体设置为 a 旁边的文本,RadioButton
就像对 a 一样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);
正如我在这个答案中所描述的: https ://stackoverflow.com/a/65262349/2802042
你可以使用这一行:
app:fontFamily="@font/myFontFamily"
在 kotlin 中,您可以通过编程方式更改单选按钮的字体
val typeface =ResourcesCompat.getFont(context, R.font.myfont)
radioButton.typeface= typeface