目前我开始致力于支持一个项目,在那里我发现了一个非常有趣的技巧。它给了一个机会不要在xml中为CustomView编写完整的类名,我觉得它看起来很脏。
以下是此技巧实现的步骤:
1)在我们的项目中创建我们自己的android.view
包。
2)创建CustomTextView extends TextView
并将其放入android.view
包。
3)像任何其他Android view
<CustomTextView
android:angle="90"
android:endColor="#efa600"
android:paddingLeft="0dp"
android:startColor="#ffe396"
android:text=""
android:textSize="24dp"
android:textStyle="bold" />
4)使用标准Android属性而不是自定义:
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
int[] ids = new int[attrs.getAttributeCount()];
for (int i = 0; i < attrs.getAttributeCount(); i++) {
ids[i] = attrs.getAttributeNameResource(i);
}
TypedArray a = context.obtainStyledAttributes(attrs, ids, defStyle, 0);
for (int i = 0; i < attrs.getAttributeCount(); i++) {
String attrName = attrs.getAttributeName(i);
if (attrName == null)
continue;
if (attrName.equals("startColor")) {
mStartColor = a.getColor(i, -1);
} else if (attrName.equals("endColor")) {
mEndColor = a.getColor(i, -1);
} else if (attrName.equals("angle")) {
mAngle = a.getFloat(i, 0);
}
}
a.recycle();
}
这种方式是安全的还是可能导致任何问题?
答案 0 :(得分:1)
虽然可以做到,但我建议您使用自己的风格。
我不确定如果Inflater会忽略它们会因为它们不是有效的样式而被删除会发生什么。
至少可以说,只需使用自定义样式就可以让您放心。
更不用说更清洁的代码。