【问题标题】:Custom XML attributes used in custom widgets自定义小部件中使用的自定义 XML 属性
【发布时间】:2012-09-27 07:54:09
【问题描述】:

我正在创建各种 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 代码中设置的枚举值。我该如何阅读它?然后,根据提供的字体,我想设置我的自定义字体。任何帮助将不胜感激。

【问题讨论】:

    标签: android custom-component custom-attribute


    【解决方案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 库项目中。

    【讨论】:

    • 我试过但卡住了。当我终于得到答案时,我把它分享给大家。没有伤害。
    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2015-06-11
    • 2014-11-26
    相关资源
    最近更新 更多