我可以创建自定义属性并将其应用到常规EditTexts
,如下所示:
<EditText
android:id="@+id/field1"
custom:attr1="whatever"
(...)
<EditText
android:id="@+id/field2"
custom:attr1="whatever2"
(...)
我的问题:我是否可以在不创建扩展EditText
的类的情况下阅读这些自定义属性的值?我的意思是,我想从Activity
读取自定义属性,但到目前为止我看到的示例要求我从自定义视图的构造函数中读取值,例如:Defining custom attrs
答案 0 :(得分:7)
我的问题:我可以在没有的情况下阅读这些自定义属性的值 创建一个扩展EditText的类?
是的,您可以在不扩展类的情况下获取这些属性。为此,您可以使用Factory
上LayoutInflater
用于解析布局文件的特殊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"
传递其他数据(稍后使用Activity
在view.getTag()
中检索它)。
我建议您不要使用这些自定义属性并重新考虑当前的方法。
答案 1 :(得分:0)
我会说不,你不能。我检查了EditText
及其父项的来源,但未找到将自定义属性存储到实例属性的位置,以便您以后可以使用它们。所以我认为你需要创建自己的扩展EditText
的类。