更改单选按钮旁边的文字字体?

时间:2013-06-14 16:51:40

标签: android fonts radio-button

更改我使用的textView的字体

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

我想为单选按钮旁边的文字做类似的事情,我该如何做呢?

4 个答案:

答案 0 :(得分:24)

您将字体设置为RadioButton旁边的文字,方法与TextView相同:

RadioButton rb  = (RadioButton) findViewById(R.id.radiobutton);
Typeface font = Typeface.createFromAsset(getAssets(), "SF_Cartoonist_Hand_Bold.ttf");
rb.setTypeface(font);

答案 1 :(得分:1)

From the official doc:

Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);

答案 2 :(得分:1)

我个人喜欢在片段或活动之外处理样式。以下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 "";
    }
}

答案 3 :(得分:0)

正如我在此答案中所述: https://stackoverflow.com/a/65262349/2802042

您可以使用以下行:

  app:fontFamily="@font/myFontFamily"