4

有几个构造函数可用于定义 ImageView。例如

1) public ImageView (Context context)
2) public ImageView (Context context, AttributeSet attrs)
3) public ImageView (Context context, AttributeSet attrs, int defStyle)** 

我对使用第二种和第三种构造函数感到困惑。基本上我不知道用什么来代替AttributeSet。 请提供一个编码示例。

4

2 回答 2

3

这些构造函数在View文档中定义。以下是来自的参数说明View(Context, AttributeSet, int)

参数

  • context    视图运行的上下文,通过它可以访问当前的主题、资源等。
  • attrs        使视图膨胀的 XML 标记的属性。
  • defStyle    应用于此视图的默认样式。如果为 0,则不会应用任何样式(超出主题中包含的样式)。这可能是一个属性资源,其值将从当前主题中检索,也可能是一个显式样式资源。

值得注意的是,如果你没有要传递的属性,你可以传递null代替 an 。AttributeSet

在编码方面AttributeSet,这是我用于自定义TextView类的一些代码:

public EKTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // ...
    if (attrs != null) {
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LocalTextView);
        determineAttrs(context, a);
    }

    // ...
}
private void determineAttrs(Context c, TypedArray a) {
    String font = a.getString(R.styleable.fontName);
    if (font != null)
        mTypeface = Typeface.createFromAsset(c.getAssets(), "fonts/" + font);

    mCaps = a.getBoolean(R.styleable.allCaps, false);
}

正如你所看到的,一旦你TypedArray从属性中得到一个,你就可以使用它的各种方法来收集每个属性。您可能要查看的其他代码是or 的View(Context, AttributeSet, int)代码Resources.obtainStyledAttributes(AttributeSet, int[], int, int)

于 2013-02-03T18:22:08.683 回答
1

创建imageView的方式,ImageView with Context

ImageView image= new ImageView(context);

在这里,当您要设置高度、宽度重力等值时,您需要设置

image.set****();

根据您需要使用的属性数量,不使用 setXXX() 方法。

2.使用属性集,您可以在单独的 xml 文件中的 res/values 文件夹中定义一组属性,如高度、宽度等,将 xml 文件传递​​给 getXml()

XmlPullParser parser = resources.getXml(yourxmlfilewithattribues);
 AttributeSet attributes = Xml.asAttributeSet(parser);
ImageView image=new ImageView(context,attributes);

在这里,您还可以在 xml 中定义自定义属性。您可以使用 AttributeSet 类示例提供的方法来访问

getAttributeFloatValue(int index, float defaultValue)

//返回'index'处属性的浮点值

于 2013-02-03T18:35:02.603 回答