이 소스는 화면의 폭을 구해서 거기에 여러개의 폭이 다른 버튼들을 수직 수평으로 배열 하려고, 인터넷에서 여러개의 예
제 소스들 중 필요한 부분은 합치고 , 수정하는 과정 속에서 문제가 발생해서 질문 드립니다.
if( screenWidth < buttonSizeSum )-----1번
screenWidth 은 리스너 뷰의 화면 Width 값을 받는 변수입니다.
buttonSizeSum 은 배열 되는 버튼들의 Width 값을 합치는 것입니다.
위의 if문의 역할은 화면폭 보다 버튼 폭들의 합이 크면 아래 if문을 돌려서 열을 변경 시키는 것입니다.
그런데 저렇게 하면 무조건 핸드폰에서 실행 시키면 실행이 안되고 팅깁니다.
혹시 변수들이 값을 제대로 못 받아서 그런가 하고 다르게 수식을 변경하면
if( (buttonSizeSum % screenWidth) == 0 ) ----2번
이런식으로 변경하면 화면에 수직 수평으로 배열이 됩니다. 그래서 값을 못 받는 문제는 아닌 것 같고
if문에 조건식을 제대로 못 만들어서 그런것 같은 데 저렇게 사용 하면 안되는 것인가요
전체 소스를 1번 버전과 2번 버전으로 올리겠습니다.
화면 폭에 맞게 가져온 버튼의 총 길이와 비교해서 화면 폭보다 크면 열을 바꾸게 하는 비교식을 어떻게 작성해야 하는 지
해결 책좀 알려 주세요 머리에 쥐가 나려고 합니다.
1번 코딩 소스 MainActivity.java
public LinearLayout linearLayoutBottom;
public Button listBtn;
public static int screenWidth;
public static int screenHeight;
public static int buttonSize;
public static int buttonSizeSum;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
linearLayoutBottom = (LinearLayout)findViewById(R.id.linearLayoutBottom);
linearLayoutBottom.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT );
LinearLayout rowLayout =null;
buttonSizeSum = 0;
for (int i = 1; i < 50; i++) //나중에 디비테이블의 컬럼 수로 대체 할 부분
{
/*if( (buttonSizeSum % screenWidth) == 0 ) */
if( screenWidth < buttonSizeSum )
{
rowLayout = new LinearLayout( this );
linearLayoutBottom.addView( rowLayout, p );
buttonSizeSum = 0;
}
listBtn = new Button(this);
listBtn.setId(R.id.listButton);
listBtn.setText(""+ i);
listBtn.setWidth(50);
listBtn.setHeight(20);
//listBtn의 폭 값을 가져 온다.
listBtn.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
buttonSize = listBtn.getMeasuredWidth();
buttonSizeSum = buttonSizeSum + buttonSize;
listBtn.setOnClickListener(this);
rowLayout.addView(listBtn, p);
}
}
public void onClick(View v) {
}
}
2번코딩은
파란 부분을 주석 처리 하고 아래 붉은 부분의 주석을 해제하면 됩니다.