2012-09-27 96 views
1

我正在創建各種Android窗口小部件的子類來創建我自己的窗口小部件。以下是我迄今所做的:自定義窗口小部件中使用的自定義XML屬性

(在我的RES /價值/ 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代碼中設置的枚舉的值。我如何閱讀它?然後,根據提供的字體,我想設置我的自定義字體。任何幫助將不勝感激。

回答

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庫項目中。

+1

我曾嘗試過,但卡住了。當我終於得到答案時,我與你們分享了它。沒有傷害完成。 – AndroidDev