2010-11-18 8 views
1

몇 가지 컨트롤 (layout_alignParentTop = true)이있는 TableLayout, 아래쪽에있는 LinearLayout (layout_alignParentBottom = true)의 3 가지 요소가 포함 된 RelativeLayout이 있습니다. 그들 사이에 뻗어있는 ListView (두 요소를 layout_below와 layout_above를 사용하여). 잘 작동하지만 특정 상황에서는 LinearLayout의 하단이 사라져야합니다. setVisibility를 사용하여 View.GONE으로 설정하거나 setLayoutParams()를 사용하여 높이를 0으로 설정하면 ListView는 새로 해제 된 공간을 차지하도록 크기를 조정하는 것을 완고하게 거부합니다. 기본적으로 계층 구조의 모든 것에 requestLayout()을 호출 해 보았습니다. 아무 것도 작동하지 않는 것 같습니다. 계층 뷰어를 실행하면 뷰가 사라 졌거나 layout_height가 0 인 것을 볼 수 있지만 여전히 작동하지 않습니다.안드로이드 : 설정 높이를 0으로 설정

역설적이게도 계층 뷰어가 완료되면 레이아웃이 자체적으로 수정됩니다. 내 사용자가 계층 뷰어를 실행하는 것이 아마도 용납 될 수 없다고 생각합니다.

EDIT : 중간 레이아웃은 사실 ListView가 포함 된 RelativeLayout입니다. 문제가 될 수 있으므로이를 시도하고 제거 할 것입니다. 내가 뭘보고 있는지에 대한 아이디어를 제공하는 XML의 단순화 된 버전을 게시했습니다.

<RelativeLayout 
    android:id="@+id/main_container" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/top_table" 
     android:layout_alignParentTop="true" 
     android:stretchColumns="2" 
     android:shrinkColumns="1"> 
     <!-- removed for simplicity --> 
    </TableLayout> 
    <RelativeLayout 
     android:id="@+id/main_content" 
     android:descendantFocusability="afterDescendants" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/title_table" 
     android:layout_above="@id/ad_toolbar"> 
     <!-- removed for simplicity --> 
     <ListView 
      android:id="@+id/android:list" 
      android:layout_alignParentTop="true" 
      android:descendantFocusability="afterDescendants" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
    </RelativeLayout> 

    <LinearLayout 
     android:id="@+id/bottom_layout" 
     android:orientation="vertical" 
     android:layout_alignParentBottom="true" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
     <!-- removed for simplicity --> 
    </LinearLayout> 
</RelativeLayout> 
+0

레이아웃의 .xml을 게시 할 수 있습니까? –

+0

레이아웃은 여러 가지 활동에 사용되는 몇 가지 레이아웃 파일로 구성되기 때문에 실제 XML은 매우 복잡합니다. 그러나 위의 단순화 된 버전을 게시했습니다. 그리고 중간 영역은 실제로 차이를 만들 수도 ListView가 포함 된 RelativeLayout, 나는 그것을 시도하고 제거 할 것을 깨달 았어. – jjb

답변

1

부모에게 RelativeLayout을 사용하는 특별한 이유가 있습니까? 이것은 ListView가 layout_height = "0dip"및 layout_weight = "1"인 TableLayout, ListView 및 LinearLayout을 포함하는 수직 LinearLayout을 사용해야하는 경우와 같습니다. 하단 LinearLayout에 가시성을 설정하면 ListView의 레이아웃 가중치가 공간을 채우기 위해 확장되어야합니다.

+0

layout_weight가 올바른 해결책입니다. 그는 아직 생각하지 못했거나 문제가 우리가 생각하는 것보다 더 복잡합니까? 나는 그것을 의심한다. 그래서 xml이 유용 할 것입니다. D –

+0

위쪽 및 아래쪽 요소가 포함 된 레이아웃 파일이 여러 활동에서 사용되므로 하위 요소를 적절히 배치하기 위해 RelativeLayout이라는 사실을 사용하기 때문에 RelativeLayout입니다. 가능한 모든 레이아웃이 LinearLayout처럼 쉽게 작동하는 것은 아닙니다. – jjb

관련 문제