2011-05-04 9 views
1

아래 레이아웃 (더 큰 레이아웃의 일부)에서는 버튼을 클릭 할 때까지 컨테이너 레이아웃의 가시성이 "사라짐"으로 설정됩니다. 버튼 클릭에서 container_ll이 보이지 않으면 visible로 설정되고 사용자 정의보기가 reminderViews_ll 컨테이너에 추가됩니다.LinearLayout은 너비 0 (명시 적 설정 또는 가중치 포함)

보기가 추가되고 container_ll보기가 버튼 클릭시 표시됩니다. 다음은 단추를 클릭 한 후 다양한보기의 너비와 높이입니다.

container_ll   width 420, height 96. 
lineDivider_view  width 420, height 2 (as expected) 
reminder_img   width 36, height 36 (as expected, hdpi phone) 
reminderViews_ll  width 0, height 96 (argh) 


<LinearLayout 
    android:id="@+id/container_ll" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:visibility="gone"     
    > 

    <View style="@style/lineDivider_view" /> 

    <ImageView 
     android:id="@+id/reminder_img" 
     android:layout_width="24dp" 
     android:layout_height="24dp" 
     android:layout_gravity="center_horizontal" 
     /> 

    <!-- Stick the actual Reminder TVs + Del buttons in here dynamically --> 
    <LinearLayout 
     android:id="@+id/reminderViews_ll" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1.0" 
     />     
</LinearLayout> 

나는 여기에서 어디로 가야할지를 놓치고 있습니다. 나는 무효화 된 레이아웃을 생각하여 뷰를 보이게 한 후에 다시 그리도록 강요하지만, 그것은 나를 위해 일한 적이 없으며, reminderViews_ll이 높이 96을 얻을 수 있다면 문제가 될 수 없다. LinearLayout의 치수를 계산한다.

나는이 질문을 내가 쓰는만큼 많이 읽었기를 바랍니다. 항상 그렇듯이 모든 포인터가 감사합니다.

+0

너비가 0dp로 설정된 이유를 묻는 사람들은 다음 질문과 대답을 참조하여 내가 미쳐 있지 않다는 것을 표시하십시오. D --http : //stackoverflow.com/questions/3470420/is-it - 안드로이드 선형의 가로 질러 - 버튼을 균일하게 배포 할 수 있습니다. – ataulm

+0

컨테이너가 확장되어 XML (reminderViews_ll 내부)에 버튼을 설정하면 버튼이 표시됩니까? 그렇다면 "동적"코드에 문제가있을 수 있습니다. – dmon

답변

1

표시 할 번호가 정확합니다.

컨테이너의 너비는 420입니다. fill_parent 또는 wrap_content로 설정된 다른보기는 모든 공간 (실제로는 더 많은 공간)을 차지합니다. 그런 다음 Linear 레이아웃은 가중치가있는 뷰의 나머지 공간을 조각합니다. 할당 할 공간이 없기 때문에 0이됩니다.

container_ll   width 420 
lineDivider_view  - 420 
reminder_img   - 36 
     =    -36 

so this makes sense 
reminderViews_ll  width 0 

단순히 제공 할 여지가 없습니다.

가로보기에서 가로선 구분선을 사용하는 이유는 무엇입니까?

+0

남자 어떤 멍청한 ... 나는 있습니다. 수평 라인 분배기는 작동해야하는 지점에서 나가기위한 것이 었습니다. 작동 할 때 그것을 줄 것이지만, 이것이 대답 일뿐입니다. – ataulm

0

아, 매우 혼란 스러워요. layout_width = "fill_parent"및 layout_weight = "1.0"이 작동하지 않습니까?

layout_width = "0dp"는 입력 내용에 관계없이 너비 0으로 보장되므로 사용자가 원하는대로 할 수 없습니다. fill_parent를 사용하고 있는데 여전히 작동하지 않는다면 올바르게 작동해야하기 때문에 사용자 정의 View를 올바른 LinearLayout에 추가하는지 의문이 있습니다.

+0

나는 layout_width = "0dp"와 함께 layout_weight = "1.0"과 layout_height = "wrap_content"/ "fill_parent"를 사용했습니다. 목표가 달성되는 곳에서 남은 공간을 채울 것입니다. 동일한 단면도 - 것에서 무게를 주어졌다). 나는 계층 뷰어를 사용하여 높이/너비와 실제로 올바른 컨테이너에 추가 된 뷰를 확인했습니다. : s – ataulm

+0

아니요, 이것은 사실이 아닙니다. 뷰의 너비를 1로 설정하고 다른 너비를 0dp + layout_weight = 1.0로 설정하면 첫 번째 뷰가 요청한 너비를 갖는지 확인한 후 두 번째 0dp 뷰가 나머지 공간을 채울 수 있습니다. Paranoid : P : 나는 각각 다른 배경색을 가진 세 개의 TextViews가있는 새로운 프로젝트에서 테스트했습니다 : 25dp, 50dp 및 0dp + layout_weight = 1.0 – ataulm

+0

흥미 롭습니다.나는 정정했다 : 당신도 그렇게 할 수 있다는 것을 깨닫지 못했다. – Femi

0

reminderViews_ll에서 0 dp로 android:layout_width을 설정 했으므로 원하는 경우이 매개 변수를 동적으로 변경해야합니다. 나는 왜 당신이 그것을 0 dp로 설정했는지 이해하지 못하고 왜 폭이 제로인지 물어 본다.

+0

fill_parent를 사용해도 동일한 결과가 생성됩니다. width = 0dp 및 weight = 1.0의 조합은 컨테이너의 나머지 공간을 채우기 위해보기를 확장해야합니다. – ataulm