Vraag Android Help bij het wijzigen van het lettertype van de knop, hoe?


ik wil het lettertype dat op de knoptekst staat wijzigen, ik heb dit voor elkaar gekregen met tekst op het scherm, tekstweergave, maar kan geen info vinden, of hulp bij het toepassen op een knop.

Ik ben een beginneling, dus het zou erg op prijs gesteld zijn om de code hiervoor te gebruiken. Dit is wat ik gebruik voor de tekstweergave, maar hoe verander ik het lettertype van de knop?

TextView txt = (TextView) findViewById(R.id.custom_font);  
Typeface font = Typeface.createFromAsset(getAssets(), "1543Humane_jenson_bold.TTF");  
txt.setTypeface(font);

Bedankt Lucy X


19
2018-03-31 08:43


oorsprong


antwoorden:


Knop IS EEN TextView, dus doe het gewoon zoals met een TextView:

Button txt = (Button) findViewById(R.id.custom_font);  
Typeface font = Typeface.createFromAsset(getAssets(), "1543Humane_jenson_bold.TTF");  
txt.setTypeface(font);

49
2018-03-31 09:04



Ik gebruik zo voor de knop en het werkte (hetzelfde als voor TextView) ..

 Button enter=(Button) findViewById(R.id.enter);
 Typeface type=Typeface.createFromAsset(getAssets(), "arial.ttf");
 enter.setTypeface(type);

hoop dat het helpt...


6
2018-03-31 09:02



Als u van plan bent hetzelfde lettertype aan meerdere knoppen toe te voegen, stel ik voor dat u helemaal doorgaat en het als een stijl- en subklasse-knop implementeert:

public class ButtonPlus extends Button {

    public ButtonPlus(Context context) {
        super(context);
    }

    public ButtonPlus(Context context, AttributeSet attrs) {
        super(context, attrs);
        CustomFontHelper.setCustomFont(this, context, attrs);
    }

    public ButtonPlus(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        CustomFontHelper.setCustomFont(this, context, attrs);
    }
}

Dit is een helperklasse om een ​​lettertype in te stellen op een TextView (onthoud dat Button een subklasse van TextView is) op basis van het kenmerk com.my.package: font:

public class CustomFontHelper {

    /**
     * Sets a font on a textview based on the custom com.my.package:font attribute
     * If the custom font attribute isn't found in the attributes nothing happens
     * @param textview
     * @param context
     * @param attrs
     */
    public static void setCustomFont(TextView textview, Context context, AttributeSet attrs) {
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFont);
        String font = a.getString(R.styleable.CustomFont_font);
        setCustomFont(textview, font, context);
        a.recycle();
    }

    /**
     * Sets a font on a textview
     * @param textview
     * @param font
     * @param context
     */
    public static void setCustomFont(TextView textview, String font, Context context) {
        if(font == null) {
            return;
        }
        Typeface tf = FontCache.get(font, context);
        if(tf != null) {
            textview.setTypeface(tf);
        }
    }
 }

En hier is de FontCache om het geheugengebruik op oudere apparaten te verminderen:

public class FontCache {

    private static Hashtable<String, Typeface> fontCache = new Hashtable<String, Typeface>();

    public static Typeface get(String name, Context context) {
        Typeface tf = fontCache.get(name);
        if(tf == null) {
            try {
                tf = Typeface.createFromAsset(context.getAssets(), name);
            }
            catch (Exception e) {
                return null;
            }
            fontCache.put(name, tf);
        }
        return tf;
    }
}

In res / waarden / attrs.xml we definiëren het aangepaste styleable-kenmerk

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomFont">
        <attr name="font" format="string"/>
    </declare-styleable>
</resources>

En tot slot een voorbeeld gebruik in een lay-out:

<com.my.package.buttons.ButtonPlus
    style="@style/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_sometext"/>

En in res / values ​​/ style.xml

<style name="button" parent="@android:style/Widget.Button">
    <item name="com.my.package:font">fonts/copperplate_gothic_light.TTF</item>
</style>

Dit lijkt misschien ontzettend veel werk, maar je zult me ​​dankbaar zijn als je een aantal handvol knoppen en tekstvelden hebt waarvan je het lettertype wilt wijzigen.


3
2018-01-01 13:02