0

四角いボタンを作成してカスタムフォントを追加するのが最善の方法だと思っていました..描画を処理する分離されたクラスについて考えていました(画面の幅に応じて特定の幅=高さ)。私が疑問に思っているのは、テキスト付きのボタンにするにはどうすればよいですか? 自分の xml にボタンを配置する必要がありますか? 自分で描いたボタンの正方形に置き換えることはできますか?

ありがとう!

4

1 に答える 1

1

オリジナルのボタンをカスタムしたい場合は、を介してボタンの背景として画像を追加できますandroid:background。カスタムフォントについては、アクティビティでボタンを取得し、カスタムを設定します。Typefaceフォントをassetsフォルダに入れます。

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

この種のボタンを何度も使用したい場合は、これに似たカスタムボタンクラスを作成できます。

CustomButton

package com.example;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.Button;

public class CustomButton extends Button {
        private static final String TAG = "TextView";

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

        public CustomButton (Context context, AttributeSet attrs) {
            super(context, attrs);
            setCustomFont(context, attrs);
        }

        public CustomButton (Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            setCustomFont(context, attrs);
        }

        private void setCustomFont(Context ctx, AttributeSet attrs) {
            TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.CustomButton);
            String customFont = a.getString(R.styleable.TextViewPlus_customFont);
            setCustomFont(ctx, customFont);
            a.recycle();
        }

        public boolean setCustomFont(Context ctx, String asset) {
            Typeface tf = null;
            try {
            tf = Typeface.createFromAsset(ctx.getAssets(), asset);  
            } catch (Exception e) {
                Log.e(TAG, "Could not get typeface: "+e.getMessage());
                return false;
            }

        setTypeface(tf);  
        return true;
        }

}

attrs.xml:(res / valuesで)

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

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:foo="http://schemas.android.com/apk/res/com.example"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.example.CustomButton 
        android:id="@+id/button"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:text="@string/showingOffTheNewTypeface"
        foo:customFont="custom.ttf">
    </com.example.CustomButton >
</LinearLayout>

メモリの問題を回避するためにHashMapを使用する書体クラス。で変更tf = Typeface.createFromAsset(ctx.getAssets(), asset); _setCustomFonttf= Typefaces.get(mContext, "cutomefont");

    public class Typefaces{

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

    public static Typeface get(Context c, String name){
        synchronized(cache){
            if(!cache.containsKey(name)){
                Typeface t = Typeface.createFromAsset(
                        c.getAssets(), 
                        String.format("fonts/%s.OTF", name)
                    );
                cache.put(name, t);
            }
            return cache.get(name);
        }
    }

}

インターネットのもう一つのツタンカーメン

于 2012-09-28T02:31:31.130 に答える