2012-11-28 2 views
0

다음 XML은 이 아니지만은 작동하지 않지만 동일한 효과를 얻을 수있는 방법이 있습니까? 설명하기 위해부모보기 크기에 기반한 XML의 Android 크기 조정보기

.... 
<LinearLayout 
    android:layout_width="match_parent * 5" 
    android:layout_height="match_parent" /> 
.... 

, 나는 달성하기 위해 노력하고있어 효과는 X가 부동이다 그것의 크기는 부모 레이아웃의 자식 레이아웃 X 시간을 확인하는 것입니다. XML 예제에서는 5를 사용했습니다.

이 효과를 사용하여 만들려고하는 것은 ScrollView를 Y 크기로 만들고 콘텐츠보기를 Y * X 크기로 만드는 것입니다.

+3

이 작업을 수행하려면 사용자 정의 레이아웃 (ViewGroup 확장)을 작성해야합니다. –

답변

1

필자가 아는 한 XML 레이아웃을 통해이를 달성 할 방법이 없다. 하위 뷰의 높이를 변경하려면 활동에 다음 코드를 추가 할 수 있습니다. 안드로이드가 액티비티 레이아웃을 완성하면 뷰의 크기를 알 수 있습니다. 따라서 레이아웃이 준비되고 모든 크기를 알 수있는 리스너를 추가 할 수 있습니다. 나는 당신이 작은 부모에 큰 아이를 맞지 않을 수 있지만 멀리있는 ScrollView에 관한 한이 코드가 작동해야 에드 자히드 알리에 동의 :

final ViewGroup parentView = findViewById(R.id.parentView); 
    final View childView = parentView.findViewById(R.id.childView); 

    parentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      float parentHeight = parentView.getHeight(); 

      ViewGroup.LayoutParams params = childView.getLayoutParams(); 
      params.height = (int)(parentHeight * 5); 

      childView.setLayoutParams(params); 
      //We want the listener to be called only the first time(in case it is initialized in onCreate()) 
      parentView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     } 
    }); 
+0

이것은 나를위한 최선의 대안처럼 보이지만, 내가하려고하는 것과 그 코드가하는 것의 차이점은 childView입니다. childView는 실제로 ViewGroup입니다 (이것은 LinearLayout입니다). 그러나,이 코드는 분명히 ViewGroup 함께 작동하지 않습니다 (하지만 임의의 TextView 대상으로 childView 변경할 경우 잘 작동합니다). 어떤 제안? – MikeS

0

어떻게하면 작은 부모에게 자녀를 맞출 수 있습니까? 프로그래밍을 통해서도 가능하지 않습니다.

원한다면 부모보기에는 "wrap_content"속성이 있어야하고, 그렇다면 X * 5 일을 할 수 없습니다.

그래서, 당신이 말하는 것은 불가능합니다.

+4

하위가 상위보다 클 수 있으므로 ScrollView의 작동 방식입니다. –

+0

Romain과 동의합니다. 이것은 실제로 스크롤 뷰 컨텐츠 뷰를 쉽게 설정하기위한 용도로 사용됩니다. – MikeS

+0

동의하지만 ScrollView의 하위 영역은 항상 ScrollView보다 작거나 같은 상태로 유지됩니다. – Androider

0

당신은 부모의 크기가 될 것입니다 무엇을, 당신은 PX를 지정할 수 있습니다 알고있는 경우/dp/dip/sp 값은 자식의 layout_width에 있습니다. 실제로이 방법을 권장합니다. 왜냐하면 더 간단하고 무언가 폭발 할 가능성이 적기 때문입니다.

그렇지 않으면 부모보기에서 onDraw()를 호출 한 후 실제로 폭/높이를 픽셀 단위로 가져올 수 있습니다. 누군가는 getWidth와 getHeight가 onWindowFocusChanged 호출에서 작동한다고 말했고, 이전에 뷰를 측정하는 데 성공적으로 사용했습니다.

자식 뷰가 부모를 측정하고있는 경우 하위 뷰가 확장되어 부모가 확장 될 가능성이 있으므로 (match_parent가이를 방지 할 수 있기는하지만) 혼란을 야기 할 수 있습니다. 그런 다음 부모의 크기보다 큰 자식의 크기를 조정 한 다음 확장 한 부모의 크기를 측정합니다. 그래서, 당신은 부모보다 더 커지려고 노력하는 자식의 고리에 갇히게되고, 부모는 그 자식을 수용하기 위해 크기를 재조정하게되고, 그 자식은 더욱 더 확장됩니다.

관련 문제