2011-02-07 5 views
1

ListView 내에서 TableLayout을 사용하고 있습니다. 내가 제시하는 데이터는 본질적으로 표 형식이며 TableLayout은 원하는대로 열이 정렬되도록하는 좋은 방법 인 것처럼 보입니다. 이 접근법은 대부분의 경우 잘 수행되었습니다 (아래 참조). 아래 그림과 같이 ListView에서 안드로이드 TableLayout, 신비한 열 축소

desired view

그러나

가끔 열을 나타내는 뷰는 텍스트 내용을 감쌌다.

enter image description here

잠시 동안 검색 한 후, 나는 following discussion on the Android Google Group을 가로 질러왔다. 이에 대한 응답으로 android : stretchColumns = "*"를 TableLayout에 설정하고 포함 된 TextViews가 텍스트를 신비하게 감싸는 것을 중지했습니다. 다음은 레이아웃의 XML의 일부 내용이 변경 주석 강조와 함께,이다 :

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:stretchColumns="*"> <!-- stretchColumns needed to prevent 
       TableLayout from unilaterally deciding to shrink the column 
       width and thereby causing text to wrap. --> 

내가 지금 원하는 결과를 얻고 있지만,이 내 문제를 "해결"이유에 조금 혼란 스러워요. TableLayout documentation "열의 너비가 해당 열의 셀이 가장 넓은 행으로 정의됩니다." 그러나 이것이 사실이라면, 왜 텍스트의 줄이 생기면 처음에 기둥의 크기가 줄어든 것일까 요? 누구든지 좋은 설명이 있습니까?

감사합니다, 리치

답변

1

컨테이너는 그들이 원하는 얼마나 많은 공간을 위해 자녀를 조회하고,이 과정을 반복적으로 계속됩니다. 동적으로 크기가 조정 된 모든 레이아웃 프레임 워크는 이러한 방식으로 작동합니다. 안쪽에서 아이들은 부모에게 원하는 크기를보고하고, 두 번째 단계에서 부모는 자녀에게 사용 가능한 공간이 얼마나되는지 다시보고합니다. stretchColumns 목록에 포함되지 않았 으면 (예 : 위치에 따라 명시 적으로 또는 예제 에서처럼 와일드 카드로 암시 적으로), TextView의 경우 줄 바꿈 된 텍스트를 표시하는 데 필요한 최소 공간이 최소값을 요구합니다. stretchColumns 목록에 포함될 때 전체 내용을 표시하는 데 필요한 너비가보고되고 맞는 경우 래핑되지 않습니다. 사용 가능한 것보다 많은 공간을 요청한 사람은 줄 바꿈 텍스트를받습니다. 우선 순위가 가장 낮은 것으로부터 가장 많은 것으로부터 우선 순위가 주어진다 고 상상해보십시오. 따라서 stretchColumns="*" 일 경우 가장 큰 텍스트 블록이 먼저 래핑되고 다른 모든 사람들은 정상적으로 표시됩니다.

관련 문제