티스토리 뷰

GridLayout 아이템 재정렬의 문제점

  GridLayout을 사용해서 여러개의 격자 형태를 만들고나서 서버에서 전송받은 값에 따라서 어느것은 보이고 어느것은 안보이게 하고 싶어서 처음에는 안보이고 싶은것을 'GONE'을 통해 안보이게 하였습니다. 'INVISIBLE'이 아닌 'GONE'을 썻기때문에 빈 공간을 알아서 채워줄줄 알았는데 GridLayout은 정해놓은 칸에 집어 넣는것이기 때문에 자동 채우기가 안되는것 같았습니다. 외국 싸이트인 'stackoverflow'(여러가지 배울 점이 많은 싸이트입니다. 프로그래밍 지식in 같은 곳입니다.)에서도 이 문제에 대해서 GridLayout의 Custom Adapter를 만들어서 해결하라는 답변이 많았는데요  목록 몇 개 보여주자고 Adapter를 만드는것은 아니라고 생각해서 이것저것 시도 끝에 약간 야비한? 방법으로 해결법을 찾았습니다.


내부 Item을 감싼 Layout에 ID를 지정

  우선 원하는 내용들을 GridLayout에 원하는 형태로 배열을 만들어줍니다.(순서는 상관 없습니다.) 대신 제가 사용했던 것처럼 (ImageView + TextView) 같은 한 컬럼에 두 개 이상으로 이루어져 있으면 Layout으로 감싸주셔야 합니다.(정렬을 하시려면 감싸주셨을 겁니다!!) 그 다음 그 Layout 마다 다른 ID를 지정해 주시면 됩니다. 아래코드는 제가 사용한 여러개의 item 중에 한 부분입니다. Layout에 ID를 준것을 볼 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<LinearLayout
    android:orientation="horizontal"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="5dp"
    android:id="@+id/print">
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/printer"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginLeft="5dp"
        android:text="프린트 가능"/>
</LinearLayout>
cs


GridLayout에 ID 지정

  다음으로는 사용한 GridLayout에 ID를 지정해줍니다.


1
2
3
4
5
6
7
 <GridLayout
    android:layout_width="0dp"
    android:layout_weight="4"
    android:id="@+id/grid"
    android:columnCount="2"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
cs


  코드를 통해 ID가 있는것을 보실 수 있습니다. 이제 준비는 끝났습니다!


View를 없애자!

  재정렬을 위해서 View를 없애주는 작업을 해보겠습니다. 그전에 우선 GridLayout과 사용한 Layout을 선언하겠습니다. 저는 Fragment에서 사용하고 있기때문에 앞에 view가 붙었습니다. 일반 Activity에서는 쓰지 않으셔도 됩니다.


1
2
3
4
GridLayout grid;
grid = (GridLayout) view.findViewById(R.id.grid);
LinearLayout ~~~~,~~~~,~~~~....,~~~~; // 사용한 Layout에 따라 변경
~~~~ = (LinearLayout) view.findViewById(R.id.~~~~);
cs


  선언을 하였으니 이제 View를 없애보겠습니다.


1
grid.removeView(~~~~);
cs


  '~~~~' 안에 없애길 원하시는 Layout을 적어주시면 그 Layout item을 제외하고 빈칸없이 정렬이 되어있는 모습을 보실 수 있습니다. 받아오는 값에 따라서 if문을 통해 remove를 해주시면 적용이 잘되는것을 확인하실 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday