2012-09-27 78 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