20

要更改我使用的 textView 的字体

TextView tv = (TextView) findViewById(R.id.textview);
Typeface font = Typeface.createFromAsset(getAssets(), "SF_Cartoonist_Hand_Bold.ttf");
tv.setTypeface(font);

我想为单选按钮旁边的文本做类似的事情,我该怎么做?

4

5 回答 5

29

您将字体设置为 a 旁边的文本,RadioButton就像对 a 一样TextView

RadioButton rb  = (RadioButton) findViewById(R.id.radiobutton);
Typeface font = Typeface.createFromAsset(getAssets(), "SF_Cartoonist_Hand_Bold.ttf");
rb.setTypeface(font);
于 2013-06-14T16:58:07.680 回答
2

我个人喜欢处理片段或活动之外的样式。下面的 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 "";
    }
}
于 2018-05-03T20:14:50.003 回答
2

来自官方文档:

Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);
于 2018-04-18T15:47:08.247 回答
0

正如我在这个答案中所描述的: https ://stackoverflow.com/a/65262349/2802042

你可以使用这一行:

  app:fontFamily="@font/myFontFamily"
于 2020-12-12T06:52:46.250 回答
0

在 kotlin 中,您可以通过编程方式更改单选按钮的字体

val typeface =ResourcesCompat.getFont(context, R.font.myfont) 
radioButton.typeface= typeface
于 2021-09-29T05:31:00.617 回答