大多数人都知道在 Android 中可以为自定义视图提供自定义属性。例如,在 Stackoverflow 上的这个线程中对此进行了非常出色的解释。然而,我的问题是:
是否有可能仅在满足另一个条件时才呈现这些属性?
我的意思是这样的(伪代码):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="isClock" format="boolean" />
</declare-styleable>
<if name="isClock" value="true">
<attr name="timezone" format="string">
</if>
<else>
<attr name="somethingElse" format="string>
</else>
</resources>
现在,不必使用“错误”属性的一种可能性是在 Java 代码中执行此操作,显然:
public class MyCustomView {
public MyCustomView(Context context) {
TypedArray styleables = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
boolean choice = styleables.getBoolean(R.styleable.MyCustomView_isClock, false);
if(choice) {
// It's a clock, react to the other attrs
} else {
// Don't react
}
styleables.recycle();
}
}
另一种方法是按照 ilomambo 在他的回答中提出的建议:创建具有不同名称的各种自定义视图,并让它们只具有属于它们的属性。
但是我非常问自己是否有可能不首先混淆 .xml 文件的程序员,而只向他提供他真正需要的东西组合在一个地方。毕竟这已经由 Android 完成了(嗯...... IDE/Lint/解析器......)当提示例如在使用时应该设置视图的宽度或高度0dp
时layout_weight
。
但如果我不得不猜测我会说这可能只有在我重写 Android XML-Parser 时才有可能......有人可以证明我错了吗?
提前致谢