for (int i = 0; i < maxHome; i++) {
Button home = new Button(this);
LinearLayout.LayoutParams pm = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
home.setText("주택" + homeId);
home.setId(homeId);
home.setTextSize(20);
home.setLayoutParams(pm);
//버튼 기본 사이즈 측정
Rect realSize = new Rect();
home.getPaint().getTextBounds(home.getText().toString(), 0, home.getText().length(), realSize);
Log.d("버튼가로길이", realSize.width()+"만큼 버튼가로길이");
int useWidth = width;//for문에서 사용하기 위하여 act1에서 입력된 레이아웃 전체 가로길이 width를 useWidth변수명에 입력함
totalBtnSize += realSize.width(); // 생성된 버튼의 사이즈 합계를 변수에 입력
Log.d("가로길이가 제대로 입력되었는가",totalBtnSize+"만큼 입력됨.");
Log.d("현재 레이아웃 가로길이는 얼마인가",useWidth+"임.");
if (useWidth >= totalBtnSize) {
buttonLayout.addView(home);
Log.d("버튼추가1","버튼 "+homeId);
} else if (useWidth < totalBtnSize && totalBtnSize/useWidth == 1) {
buttonLayout2.setVisibility(View.VISIBLE); //두번째 버튼 레이아웃 보임
buttonLayout2.addView(home);
Log.d("버튼추가2","버튼 "+homeId);
} else if (useWidth < totalBtnSize && totalBtnSize/useWidth == 2) {
buttonLayout3.addView(home);
buttonLayout3.setVisibility(View.VISIBLE); //세번째 버튼 레이아웃 보임
Log.d("버튼추가3","버튼 "+homeId);
} else {
buttonLayout.addView(home);
Log.d("버튼추가_기타","버튼 "+homeId);
}
home.setOnClickListener(onClickListener);
homeId++;
}
버튼을 동적으로 생성해주는데, 자동으로 개행할 수 있도록 하는 기능입니다.
버튼추가될 때마다 버튼길이를 측정해서(totalBtnSize), 추가될 레이아웃의 가로길이(useWidth)와 비교하도록 하고, 버튼길이가 레이아웃 길이를 초과할 때, 다음 레이아웃에 버튼이 추가되도록 하였습니다.
그런데, 길이 측정까지는 제대로 들어가는데, if문 안에있는 버튼 추가기능이 작동하지 않습니다.
참고로 버튼이 추가될 레이아웃(buttonLayout, buttonLayout2, buttonLayout3) 중, 2와 3은 Visibility 속성을 GONE로 해두었고, if문 안에서 VISIBLE되게 하였습니다. 무슨 문제일까요?