2012-09-11 35 views
1

我正在构建包含两个标准视图的自定义View。我对每个包含的View都有一个默认样式,并且有一个自定义属性,可以让用户为每个包含的View指定一个自定义样式。我可以得到默认的自定义样式很好,并传递正确的样式ID作为每个包含View的构造函数的第三个参数。我正在很难做的是根据android:layout_heightandroid:layout_width以适当的风格生成ViewGroup.LayoutParams这些包含Views。如何从样式资源中自定义查看android:layout_height查看

似乎像我需要使用ViewGroup.LayoutParams(Context, AttributeSet)构造函数和AttributeSet docs说我应该得到一个通过AttributeSet

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

...但是,抛出一个Resources$NotFoundExceptionframeworks/base/libs/utils/ResourceTypes.cpp警告那Requesting resource %p failed because it is complex

因此,我的问题,在降低特异性的顺序:

  1. 有没有办法得到一个XmlPullParser以“复杂”的元素的作品?
  2. 有没有其他方法可以得到AttributeSet对应于<style>元素?
  3. 有没有其他的方法来构造一个LayoutParameters会注意给定风格的layout_heightlayout_width值?

回答

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