2012-09-11 1 views
1

두 개의 표준보기를 포함하는 사용자 정의 View을 작성 중입니다. 포함 된 각 뷰에 대한 기본 스타일과 포함 된 각 뷰에 대해 사용자 정의 스타일을 지정할 수있는 사용자 정의 속성이 있습니다. 커스텀 스타일을 사용해도되고, 포함 된 각 View 생성자의 세 번째 매개 변수로 올바른 스타일 ID를 전달할 수 있습니다. 내가 힘든 시간을 보내고있는 것은 적절한 스타일의 android:layout_heightandroid:layout_width에 기반하여 포함 된 뷰에 대해 ViewGroup.LayoutParams을 생성하는 것입니다.android : custom_view에서 스타일 리소스의 layout_height보기

나는 ViewGroup.LayoutParams(Context, AttributeSet) 생성자를 사용해야하는 것 것, 그리고 AttributeSet docs은 내가 AttributeSet를 통해

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

를 얻어야한다라고 ...하지만 그 frameworks/base/libs/utils/ResourceTypes.cpp에서 경고와 Resources$NotFoundException를 던졌습니다 그 Requesting resource %p failed because it is complex.

따라서, 특이성의 순서로 감소 내 질문 :

  1. 은 "복잡한"요소와 작동하는 XmlPullParser을 얻을 수있는 방법이 있나요?
  2. <style> 요소에 해당하는 AttributeSet을 얻는 다른 방법이 있습니까?
  3. 주어진 스타일의 layout_heightlayout_width 값에주의해야하는 LayoutParameters을 구성하는 다른 방법이 있습니까?

답변

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