如何在Android中阅读自定义属性

时间:2013-01-15 13:58:04

标签: java android android-custom-view

我可以创建自定义属性并将其应用到常规EditTexts,如下所示:

<EditText
     android:id="@+id/field1"
     custom:attr1="whatever"
     (...)
<EditText
     android:id="@+id/field2"
     custom:attr1="whatever2"
     (...)

我的问题:我是否可以在不创建扩展EditText的类的情况下阅读这些自定义属性的值?我的意思是,我想从Activity读取自定义属性,但到目前为止我看到的示例要求我从自定义视图的构造函数中读取值,例如:Defining custom attrs

2 个答案:

答案 0 :(得分:7)

  

我的问题:我可以在没有的情况下阅读这些自定义属性的值   创建一个扩展EditText的类?

是的,您可以在不扩展类的情况下获取这些属性。为此,您可以使用FactoryLayoutInflater用于解析布局文件的特殊Activity集。像这样:

super.onCreate(savedInstanceState);
getLayoutInflater().setFactory(new CustomAttrFactory());
setContentView(R.layout.the_layout);

其中CustomAttrFactory是这样的:

public static class CustomAttrFactory implements Factory {

    @Override
    public View onCreateView(String name, Context context,
            AttributeSet attrs) {
        String attributeValue = attrs
                .getAttributeValue(
                        "http://schemas.android.com/apk/res/com.luksprog.droidproj1",
                        "attrnew");
        Log.e("ZXX", "" + attributeValue);
        // if attributeValue is non null then you know the attribute is
        // present on this view(you can use the name to identify the view,
        // or its id attribute)
        return null;
    }
}

这个想法来自blog post,您可能需要阅读它以获取更多信息。

此外,根据自定义属性(或属性,如果您有其他属性),您可以使用android:tag="whatever"传递其他数据(稍后使用Activityview.getTag()中检索它)。

我建议您不要使用这些自定义属性并重新考虑当前的方法。

答案 1 :(得分:0)

我会说不,你不能。我检查了EditText及其父项的来源,但未找到将自定义属性存储到实例属性的位置,以便您以后可以使用它们。所以我认为你需要创建自己的扩展EditText的类。