创建自定义视图

4
我想创建一个自定义视图TestView类,可以通过new TestView()创建对象。 然而,一个新的视图类需要一个 AttributeSet 对象。我从哪里获取这个 AttributeSet 对象,它应该包括什么?
2个回答

10

这不是强制要求的,大多数情况下,只要您提供从View传递给super()的构造函数即可,您甚至不必担心它。

public CustomView(Context context)  // No Attributes in this one.
{
  super(context);
  // Your code here
}

public CustomView(Context context, AttributeSet attrs)
{
  super(context, attrs);
  // Your code here
}

public CustomView(Context context, AttributeSet attrs, int default_style)
{
  super(context, attrs, default_style);
  // Your code here
}

View 负责处理与添加视图到布局时传递的所有 android:* 属性相关的繁重任务。如果你已定义了它们,你的构造函数可以利用这些属性或你自己的属性:

<com.blrfl.CustomView
 android:id="@+id/customid"
 android:layout_weight="1"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:layout_gravity="center"
 blrfl:foo="bar"
 blrfl:quux="bletch"
/>

我花了很多时间尝试动态生成attrs集合,但几乎找不到任何关于如何实现此操作的文档或示例。一个好问题可能是,在不使用attrs且使用new CustomView()的情况下如何设置foo和quux属性。 - Emile
可能是CustomView(String foo, String bletch)。 - Emile
问吧,我会回答的。 - Blrfl
这里提出了一个问题,请告诉我是否是一个合适的问题。https://dev59.com/pm855IYBdhLWcg3wKxDc - Emile

0

视图类提供的3个构造函数中的任何一个都可以实现。因此,提供带有属性集的构造函数并不是强制性的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接