안드로이드 개발 질문/답변
(글 수 45,052)
코드상에서 RelativeLayout에 내용을 채우려는데 원하는데로 잘 안돼서 조언을 구합니다 ㅠㅠ
소스코드는 다음과 같이 작성하였습니다.
중간에 나오는 CommonMethods.setNumberEditText() 메소드는 EditText의 속성을 지정해서 생성해주는 메소드인데 2번째 인자가 id입니다.
즉, EditText는 1~7의 id를 갖게 되고 각각 자신의 아이디보다 1 낮은 EditText의 오른쪽에 10 간격을 두고 배치됩니다.
그리고 7번 EditText 위에 "(보너스)"라는 문자열을 출력하기 위해서 TextView를 생성한 뒤에 LayoutParams를 셋팅해줍니다.
이렇게 하면 아래같이 결과가 나옵니다.
결과를 보니 RelativeLayout에 EditText를 넣으면 레이아웃 높이가 EditText와 같이 지정되고
그 뒤에 TextView가 들어가면 높이는 변하지 않고 억지로(?) 집어넣어져서 위 아래가 잘리는 것 같습니다.
실제 Hierarchy View에서 보면 잘린 것을 확인할 수 있습니다.
빨갛게 표시된 것이 RelativeLayout이고 나머지가 안에 들어있는 모습이 나오네요.
그리고 TextView는 엉뚱하게도 1번 EditText 위에 올라갑니다 ㅠㅠ
정리하면 지금 제가 해결하지 못하고 있는 문제는
1. RelativeLayout에 위젯을 집어넣었을 때 높이가 변하지 않음
2. TextView가 정확한 위치에 올라가지 않음
이렇게 두가지 입니다. 조언을 부탁드리겠습니다.
소스코드는 다음과 같이 작성하였습니다.
RelativeLayout rl = ( RelativeLayout ) findViewById( R.id.PrizeNumbers ); // 기준점이 되는 EditText rl.addView( CommonMethods.setNumberEditText( this, 1 ) ); for( int i = 1; i < 7; i++ ){ EditText et = CommonMethods.setNumberEditText( this, i + 1 ); rl.addView( et ); // EditText간에 간격을 지정 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( et.getLayoutParams() ); lp.addRule( RelativeLayout.RIGHT_OF, i ); lp.leftMargin = 10; et.setLayoutParams( lp ); } TextView tv = new TextView( this ); tv.setTextSize( 10 ); tv.setText( "(보너스)" ); rl.addView( tv ); // 7번째 EditText 위에 올림 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( tv.getLayoutParams() ); lp.addRule( RelativeLayout.ABOVE, 7 ); tv.setLayoutParams( lp );
중간에 나오는 CommonMethods.setNumberEditText() 메소드는 EditText의 속성을 지정해서 생성해주는 메소드인데 2번째 인자가 id입니다.
즉, EditText는 1~7의 id를 갖게 되고 각각 자신의 아이디보다 1 낮은 EditText의 오른쪽에 10 간격을 두고 배치됩니다.
그리고 7번 EditText 위에 "(보너스)"라는 문자열을 출력하기 위해서 TextView를 생성한 뒤에 LayoutParams를 셋팅해줍니다.
이렇게 하면 아래같이 결과가 나옵니다.
결과를 보니 RelativeLayout에 EditText를 넣으면 레이아웃 높이가 EditText와 같이 지정되고
그 뒤에 TextView가 들어가면 높이는 변하지 않고 억지로(?) 집어넣어져서 위 아래가 잘리는 것 같습니다.
실제 Hierarchy View에서 보면 잘린 것을 확인할 수 있습니다.
빨갛게 표시된 것이 RelativeLayout이고 나머지가 안에 들어있는 모습이 나오네요.
그리고 TextView는 엉뚱하게도 1번 EditText 위에 올라갑니다 ㅠㅠ
정리하면 지금 제가 해결하지 못하고 있는 문제는
1. RelativeLayout에 위젯을 집어넣었을 때 높이가 변하지 않음
2. TextView가 정확한 위치에 올라가지 않음
이렇게 두가지 입니다. 조언을 부탁드리겠습니다.
2010.01.31 02:11:26
RelativeLayout 를 사용하시려는 이유는 정확히 모르겠지만.. 위에 같은 이미지 배열은 TableLayout 이 좀더 깔끔하고 정확하게 될듯 싶네요... 반드시 RelativeLayout 사용할 필요가 없으시면 TableLayout 로 변경해 보시는 것이 어떨까요?
2010.01.31 18:36:36
결국 RelativeLayout으로 해결 방법을 찾았습니다 ^^ 조언해주신 데이빗백곰님 감사합니다.
1. RelativeLayout의 높이를 wrap_content로 해놓으면 안에 뷰를 몇개를 넣든 그 중에서 가장 큰 뷰의 높이로 지정이 되네요.
강제적으로 RelativeLayout의 높이를 조정하니 해결되었습니다.
2. RelativeLayout.ABOVE 속성은 단지 y좌표에만 관여하는 것이었네요.
RelativeLayout.ALIGN_RIGHT도 추가했더니 제대로 7번 EditText 위에 올라갔습니다.
1. RelativeLayout의 높이를 wrap_content로 해놓으면 안에 뷰를 몇개를 넣든 그 중에서 가장 큰 뷰의 높이로 지정이 되네요.
강제적으로 RelativeLayout의 높이를 조정하니 해결되었습니다.
2. RelativeLayout.ABOVE 속성은 단지 y좌표에만 관여하는 것이었네요.
RelativeLayout.ALIGN_RIGHT도 추가했더니 제대로 7번 EditText 위에 올라갔습니다.