2016-06-07 6 views
0

첫 번째 Android 앱을 개발 중입니다. 그것은 게임 tictactoe의 복제품입니다. 앱의 백 엔드가 완벽하게 작동합니다. UI도 완벽하게 작동합니다. 내 문제는 UI 표시입니다. 응용 프로그램은 3x3 대형 9 정사각형으로 구성되어 있습니다. 사각형을 선택하면 현재 사각형 사각형 (드로어 블)으로 바뀝니다. Nexus 5 에뮬레이터를 사용하여 테스트 해 보았습니다. 나는 모든 것에 만족한다. 마지막 테스트에서 Nexus 에뮬레이터를 사용하여 앱을 실행했는데 3x3 그리드가 올바르지 않습니다. 처음에 나는 toLightOf, toLeftOf, below, above, alignBaseline, alignTop 등의 XML 레이아웃 코드를 사용하여 LinearLayout에 3x3 격자를 표시하여 격자를 올바르게 표시하려고했습니다. Nexus 에뮬레이터에서 이것을 열면 사각형이 겹쳐졌습니다 (사각형의 크기가 너무 크다고 가정)하지만 Nexus 5 에뮬레이터에서는 문제가 없습니다. 레이아웃을 GridLayout으로 변경했습니다. GridLayout은 겹쳐진 부분을 고정했지만 그리드는 이제 화면 오버 플로우되었습니다. 내 애플의 UI를 http://imadsayed.com/GridLayout_Overflowing.html 또는 여기에서 볼 수 있습니다. GridLayout Overflow on Nexus One (왼쪽의 에뮬레이터는 UI가 올바른 Nexus 5이고 오른쪽의 에뮬레이터는 오버플로를 나타내는 Nexus One입니다. 아래로 스크롤해야 볼 수 있습니다.) 다른 제안을 통해 온라인에서 발견 Ive는 GridLayout의 각 행을 LinearLayout에 배치하고 1x3 GridLayout에서 정렬하려고했습니다. 그리드가 오버 플로우되지는 않지만 그리드의 마지막 열은 처음 두 열보다 작은 사각형을 갖습니다. 그래서 나는 이것을 취소하고 이제 넘쳐 흐르는 그리드에 앉아 있습니다. 코드는 다음과 같습니다GridLayout 넘치는 것을 어떻게 막을 수 있습니까

나는 하나의 사각형 (이미지 뷰) 위에 붙여
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:layout_gravity="center"> 

    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:rowCount="3" 
     android:columnCount="3" 
     > 

     <!-- tl --> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/tl" 
      android:src="@drawable/square" 
      android:layout_row="0" 
      android:layout_column="0" 
      android:layout_rowWeight="1" 
      android:contentDescription="@null" 
      /> 
    </GridLayout> 
</LinearLayout> 

, 거기에 내 코드에서의 9하지만 행과 열 번호를 제외한 모든 동일. "tl"은 topLeft에 대한 주석입니다. 그것은 왼쪽 상단 사각형입니다. GridLayout 전체가 LinearLayout 내에 있으므로 Nexus 5 에뮬레이터에서 볼 수있는 것처럼 화면 중앙에 격자를 배치 할 수 있습니다. 그럼 오버 플로우가 발생하면 그리드와 그 자식 (사각형)을 다시 조정하여 화면에 모두 맞출 수 있도록 UI를 만들 수 있습니까? 비슷한 게시물은 GridLayout의 두 열에 대해서만 이야기하고 대개 그 중 하나에는 관련성이없는 텍스트가 있습니다.

답변

1

해결책을 찾았습니다. 결국 GridLayout을 3 행 1 열로 설정했습니다. 너비와 부모 너비를 match_parent로 설정합니다. 각 행과 그 자식의 LinearLayout에는 wrap_content로 설정된 너비가 있습니다. ImageViews 그 자체는 LinearLayouts의 자식이며 솔루션의 핵심 부분은 layout_weight가 "0.3"과 동일하다는 것입니다. 중력이나 다른 것에 대한 필요가 없습니다. layout_weight = "0.3"이고 ImageViews는 화면 크기의 1/3을 차지하고 GridLayout과 부모 폭은 match_parent로 설정됩니다.

0

gridlayout의 너비를 match_parent로 설정하고 부모보기의 너비가 match_parent인지 확인하려면보기가 화면 경계를 벗어나서는 안됩니다.

+0

gridlayout의 너비를 'parent와 일치'로 변경하고 모든 부모 레이아웃의 너비를 'parent와 일치'로 변경했지만 변경하지 않았습니다. 여전히 오버플로 됨 – Imz

+0

이미지의 너비를 0dp로 설정 한 다음 android : layout_gravity를 설정하여 각 이미지의 가로를 채 웁니다. – Joopkins

+0

실제로 그 중 하나는 작동하지 않았지만 ImageViews 자체에 문제가 있다고 생각하는 이미지의 크기에는 어떤 일이 발생했습니다. Joopkins :)를 올바른 트랙에 올려 주셔서 감사합니다. – Imz

관련 문제