3

나는 이런 식으로 뭔가를 달성하기 위해 노력하고있어 :안드로이드 GridLayout과의 API (21)

enter image description here

현재, 나는 수동으로 절반 화면의 폭과 동일 타일의 폭을 설정하고있다. 이것은 잘 작동하지만, 스크린 샷과 같이 타일 사이에 구분선을 추가하는 것은 어렵습니다. 다행히,이 API 21 there is now support for weight in GridLayout에서, 사용자의 편의를 위해 여기에 인용 된 것으로 보인다 :

API (21)로, 여분의 공간을 GridLayout의 분포는 무게의 원칙을 수용합니다. 가중치가 지정되지 않은 경우 이전보기 규칙이 적용되고 열의 행은 그룹 내에서 어떤 형식의 정렬을 지정하는 경우 유연한 것으로 간주됩니다 ( ). 따라서 뷰의 유연성은 정렬에 의해 영향을받습니다.이 정렬은 보통 어린이 레이아웃 매개 변수의 중력 속성을 설정하여 정의됩니다. 지정된 축을 따라 가중치 또는 정렬이 정의 된 경우 구성 요소는 해당 방향으로 유연한 것으로 입니다. 가중치 또는 정렬이 설정되지 않은 경우 구성 요소는 경직성이 아닌 것으로 간주됩니다.

동일한 행 또는 열 그룹에있는 여러 구성 요소는 으로 간주되어 병렬로 작동합니다. 이러한 그룹은 내부의 모든 구성 요소가 융통성있는 경우에만 융통성이 있습니다. 공통 경계의 한쪽에있는 행 및 열 그룹은 대신 시리즈에서 작동하는 것으로 간주됩니다. 이 두 요소로 구성된 복합 그룹은 요소 중 하나가 유연한 경우 융통성이 있습니다.

열을 늘리려면 내부에있는 모든 구성 요소의 무게 또는 중력을 정의해야합니다. 열이 늘어나지 못하게하려면 열의 구성 요소 중 하나에 무게 또는 중력을 정의하지 않도록하십시오.

유연성의 원칙이 완전한 의 모호성 제거를 제공하지 않으면 GridLayout의 알고리즘은 이 오른쪽 및 아래쪽 가장자리에 더 가까운 행과 열을 우선시합니다. 좀 더 정확히 말하자면, GridLayout은 각 축의 격자 선을 정의하는 변수 집합 인 의 제약 조건으로 각 레이아웃 매개 변수를 처리합니다. 레이아웃 중에 GridLayout은 고유 솔루션을 다른 유효한 솔루션의 해당 값보다 작거나 같은 모든 변수가 인 제약 조건으로 되돌릴 수 있도록 제약 조건을 해결합니다.

나는이 동등하게 전체 열을 달성하기 위해 노력하고, 함께 2 열이있는 GridLayout과 구성이 간단한 레이아웃을 넣어 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:columnCount="2"> 
     <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> 
     <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> 
     <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> 
     <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> 
     <TextView android:layout_width="wrap_content" android:layout_gravity="fill_horizontal" android:text="Hello" android:layout_columnWeight="1" /> 
    </GridLayout> 
</RelativeLayout> 

내가 생각했던 모든 아이들이 동일한 열 중량이 있기 때문에, 그것은 것 결과적으로 넓은 열이됩니다. 이 결과 무엇 때문에, 그러나 사건이 될 것 같습니다하지 않습니다 :

enter image description here

첫 번째 열은 두 번째 열보다 좁은. 내가 여기서 누락 된 것이 있습니까? GridLayout으로 무게가 어떻게 작용하는지 오해하고 있습니까?

또 다른 질문으로, 내용에 관계없이 동일한 너비를 보장하기 위해 체중 트릭으로 0 너비를 수행 할 수 없습니다 (TextView가 사라짐). GridLayout으로 어떻게이 작업을 수행 할 수 있습니까?

답변

2

이 버튼에 자신을 시도하고

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"   
    android:columnCount="2" > 

    <Button 
     android:layout_column="0" 
     android:layout_gravity="fill" 
     android:layout_row="0" 
     android:layout_columnWeight="1" 
     android:text="c0 | r0" /> 

    <Button 
     android:layout_column="1" 
     android:layout_gravity="fill" 
     android:layout_row="0" 
     android:layout_columnWeight="1" 
     android:text="c1 | r0" /> 

    <Button 
     android:layout_column="1" 
     android:layout_gravity="fill" 
     android:layout_row="3" 
     android:layout_columnWeight="1" 
     android:text="c1 | r3" /> 

    <Button 
     android:layout_column="0" 
     android:layout_gravity="fill" 
     android:layout_row="1" 
     android:layout_columnWeight="1" 
     android:text="c0 | r1" /> 

</GridLayout> 

텍스트를보고 싶어, 곧이, 내가 그것을 편집 할 시도하는 방법 gridlayout 작품 정말 멋진 권리를 설명?

당신은 행에 대해 열 수를 지정하고 각각의 위치 (열 번호 및 행 번호)에 위젯을 배치는 ..

실제로을 찍어 본적 .. 그것을 반영 할 텍스트의 위치를 ​​배치 gridlayout와 시간, 나는 그것을 얻기 위해 이클립스와 함께 놀아야했다. .. 그래서 열과 행 .. 당신은 그들과 실제로 놀 수 있고, 나는 단지 한 칼럼과 다른 컬럼 empty.its를 가지고있다.

은 그냥 GridLayout과의 모든 아이에게 android:layout_width="0dp"를 추가

+0

트릭을 수행하는 것처럼 보였습니다. 행/열을 지정하지 않고 가중치를 사용할 방법이 없습니까? 내 자식 중 일부는 여러 행/열을 스팬 할 수 있기 때문에 현재 행/열을 추적하지 않고도 자식을 추가 할 수 있기를 원합니다. – untitled

+0

미안하지만, 그리드 레이아웃이 어떻게 작동하는지 (셀), 그래서 당신도 할 수 있습니다. 'android : layout_gravity = "Left | Top | fill"또는'android : layout_gravity = "Right | 맨 위로 채우기 "를 선택하면 효과가있을 수 있습니다. 솔직히 그리드 레이 아웃이 어떻게 작동하는지는 생각하지 않습니다. 그리고 마지막으로'findviewById'에 의해 뷰를 찾을 수 있습니다. 뷰 그룹이기 때문에, 셀은 정렬을 위해서입니다. 희망은 @untitled – Elltz

5

도움이되기를 바랍니다 (layout_width="0dp"없이 아이가 체중 레이아웃을 깰 것입니다.)

확인 자식 뷰가 평균보다 더 큰 폭의 크기가 없다가 너비 크기를 지정하는 하위보기가있는 경우 너비 크기

희망이 있으면 도움이 될 것입니다.

관련 문제