2

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

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

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

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

3) 像任何其他 Android 一样在 XML 中使用它view

 <CustomTextView
  android:angle="90"
  android:endColor="#efa600"
  android:paddingLeft="0dp"
  android:startColor="#ffe396"
  android:text=""
  android:textSize="24dp"
  android:textStyle="bold" />

4) 使用标准的 Android 属性而不是 custom :

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();
}

这种方式是否安全或可能会导致任何问题?

4

1 回答 1

1

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

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

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

更不用说更清洁的代码了。

于 2013-01-22T15:08:50.533 回答