마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

GridLayout 자식뷰 배치방법

0 추천
<GridLayout
    android:id="@+id/gameLay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnCount="8">

</GridLayout>
for (int i = 0; i < ix; i++) {
    for (int j = 0; j < iy; j++) {
        btn[i][j] = new Button(context);
        btn[i][j].setId(num);
        //btn[i][j].setWidth(-2);
        //btn[i][j].setHeight(40);
        btn[i][j].setText("0");
        btn[i][j].setOnClickListener(btn_click);
        gameLay.addView(btn[i][j]);
        num = num + 1;
    }
}

 

 

 

위와같이 코드를 짰는데 버튼들의 크기가 지정이 되지않아 화면을 넘어갑니다.

 

setWidth와 setHeight를 이용해서 버튼의 크기를 직접 설정해주려고 하였으나 설정을 해도 바뀌는것이 없더군요

wrap_content 처럼 버튼의 크기가 저절로 바뀌게끔 하고싶어서 wrap_content의 상수값인 -2를 할당해도 변화가 없습니다.

 

버튼이 화면을 넘어가지 않게끔 버튼을 생성하고싶은데 어떻게 해야할까요?

Cro0515 (240 포인트) 님이 2019년 6월 10일 질문

1개의 답변

0 추천

아무리 말씀드려도 듣지를 않으시군요. 지난번에 코드까지 작성해 드렸는데요. 그래도 며칠 고생하셨고, 저도 마무리는 지어야 하기 때문에 적어봅니다. 

<RelativeLayout 
    android:background="#ff00ff"
    android:layout_width="match_parent"        
    android:layout_height="match_parent"   
    android:id="@+id/container_layout"
    >
final RelativeLayout layout = (RelativeLayout)findViewById(R.id.container_layout);
layout.post(new Runnable() 
    {
        @Override
        public void run()
        {
        int cols = 4;
    int rows = 4;
    int w = layout.getWidth();
    int h = layout.getHeight();
    for (int j=0; j<rows; j++) {
    for (int i=0; i<cols; i++) {
    Button button = new Button(AbsoluteLayoutActivity.this);
    layout.addView(button);    
    button.setX(w*i/cols);
    button.setY(h*j/rows);
    button.setWidth(w/cols);
    button.setHeight(h/rows);
    button.setText("Button" + i +","+j +"");
    }
    }
        }
    });

java 코드는 지난 번에 올려드린 코드인데요. xml을 보시면 layout_width가 match_parent로 되어 있는 것을 볼 수 있습니다.

wrap_content라는 것은 한마디로 컨텐츠를 감싸서 뷰를 구성하겠다는 의미입니다. 즉, 올리신 코드처럼 layout이 wrap_content가 되면 그냥 button 크기를 기준으로 감싸는 것 뿐이죠. wrap_content는 밑에서부터 위로 크기가 결정되는 방식입니다. 게임화면이라면 layout 의 크기는 화면 전체나 아니면 일정 영역으로 정해주어야 맞는 것이죠. layout의 크기를 결정하는 것이 먼저입니다.  

grid layout에서 동적으로 추가한다면, api 21부터는 weight가 지원되니 그걸 사용하십시오.

wrap_content와 match_parent, 픽셀과 dp 에 대해 공부하십시오. 안드로이드 기초 중의 기초입니다.

tellmeo (940 포인트) 님이 2019년 6월 10일 답변
tellmeo님이 2019년 6월 10일 수정
...