1

さまざまなAndroidウィジェットのサブクラスを作成して、独自のウィジェットを作成しています。これが私がこれまでにしたことです:

(私のres / values / attr.xmlで定義されています)

<attr name="font">
    <enum name="ARIAL_BOLD" value="1" />
    <enum name="ARIAL_ROUND_MT" value="2" />
    <enum name="HELVETICA" value="3" />
    <enum name="HELVETICA_BOLD" value="4" />
    <enum name="GILSANCE_LIGHT" value="4" />
  </attr>

<declare-styleable name="EditText">
    <attr name="font" />
</declare-styleable>
<declare-styleable name="Button">
    <attr name="font" />
</declare-styleable>
<declare-styleable name="TextView">
    <attr name="font" />
</declare-styleable>

それから私の中でEditText私はこれを次のように使用します:

public class EditText extends android.widget.EditText {

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

    public EditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.EditText);
    }
}

ここで、XMLコードに設定されている列挙型の値を読み取りたいと思います。どうすれば読むことができますか?次に、提供されたフォントに基づいて、カスタムフォントを設定します。どんな助けでもありがたいです。

4

1 に答える 1

1

これは私のために働いたものです

<?xml version="1.0" encoding="utf-8"?>
<resources>

<attr name="font">
    <enum name="ARIAL_BOLD" value="1" />
    <enum name="ARIAL_ROUND_MT" value="2" />
    <enum name="HELVETICA" value="3" />
    <enum name="HELVETICA_BOLD" value="4" />
    <enum name="GILSANCE_LIGHT" value="5" />
</attr>

<declare-styleable name="CustomEditText">
    <attr name="font" />
</declare-styleable>
<declare-styleable name="CustomButton">
    <attr name="font" />
</declare-styleable>
<declare-styleable name="CustomTextView">
    <attr name="font" />
</declare-styleable>

</resources>

次に、私のカスタムファイル

public class CustomEditText extends android.widget.EditText {

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

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.CustomEditText);
        final int fontValue = a.getInt(R.styleable.CustomEditText_font, 0);
        setTypeFace(fontValue);
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        TypedArray a = context.obtainStyledAttributes(attrs,
            R.styleable.CustomEditText);
        final int fontValue = a.getInt(R.styleable.CustomEditText_font, 0);
        setTypeFace(fontValue);
    }

    public void setTypeFace(int fontValue) {
        Typeface myTypeFace = Typeface.createFromAsset(this.getContext()
            .getAssets(), getApplicationFont(fontValue));
        this.setTypeface(myTypeFace);
    }
}


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:background="@drawable/login_background"
    android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res/com.mycomp.myproj">

    <TextView
        android:id="@+id/topBarText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#80000000"
        android:gravity="center_horizontal|center_vertical"
        android:text="@string/application_name"
        android:textColor="@color/white"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:textSize="35sp" />

     <com.myapp.ui.CustomEditText
        app:font="ARIAL_ROUND_MT"
        android:id="@+id/samPLE"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#80000000"
        android:gravity="center_horizontal|center_vertical"
        android:text="@string/application_name"
        android:textColor="@color/white"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:textSize="35sp" />

これは私にとってはうまくいきました。カスタム ビューが Android ライブラリ プロジェクトに配置されていることに注意してください。

于 2012-09-27T13:35:22.423 に答える