1

我正在构建一个View包含两个标准视图的自定义。我为每个包含的视图都有一个默认样式,以及一个允许用户为每个包含的视图指定自定义样式的自定义属性。我可以很好地获取默认样式和自定义样式,并将正确的样式 ID 作为每个包含的 View 构造函数的第三个参数传递。我很难做的是ViewGroup.LayoutParams根据android:layout_heightandroid:layout_width以适当的样式为这些包含的视图生成一个。

看来需要使用ViewGroup.LayoutParams(Context, AttributeSet)构造函数,而AttributeSet 文档说我应该得到一个AttributeSet via

XmlPullParser parser = resources.getXml(myResouce);  
AttributeSet attributes = Xml.asAttributeSet(parser);

...但这会引发 aResources$NotFoundException并发出frameworks/base/libs/utils/ResourceTypes.cpp警告Requesting resource %p failed because it is complex

因此,我的问题,按特异性降序排列:

  1. 有没有办法得到一个XmlPullParser适用于“复杂”元素的方法?
  2. 是否有其他方法可以获取与元素AttributeSet对应的<style>元素?
  3. 是否有其他方法来构建一个LayoutParameters将关注给定样式中的layout_height和值的方法?layout_width
4

1 回答 1

3
    static ViewGroup.LayoutParams layoutFromStyle(Context context,
        int style) {
      TypedArray t = context.getTheme().obtainStyledAttributes(
              null,
              new int[] { android.R.attr.layout_width,
                      android.R.attr.layout_height }, style, style);
      try {
          int w = t
                  .getLayoutDimension(0, ViewGroup.LayoutParams.WRAP_CONTENT);
          int h = t
                  .getLayoutDimension(1, ViewGroup.LayoutParams.WRAP_CONTENT);
          return new ViewGroup.LayoutParams(w, h);
      } finally {
          t.recycle();
      }
    }
于 2012-09-18T00:47:21.683 回答