CustomView安全吗?

时间:2012-10-06 06:42:37

标签: android android-layout android-custom-view

目前我开始致力于支持一个项目,在那里我发现了一个非常有趣的技巧。它给了一个机会不要在xml中为CustomView编写完整的类名,我觉得它看起来很脏。

以下是此技巧实现的步骤:

1)在我们的项目中创建我们自己的android.view包。

2)创建CustomTextView extends TextView并将其放入android.view包。

3)像任何其他Android view

一样在XML中使用它
 <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();
}

这种方式是安全的还是可能导致任何问题?

1 个答案:

答案 0 :(得分:1)

虽然可以做到,但我建议您使用自己的风格。

我不确定如果Inflater会忽略它们会因为它们不是有效的样式而被删除会发生什么。

至少可以说,只需使用自定义样式就可以让您放心。

更不用说更清洁的代码。