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

버튼 클릭 시 textView의 사이즈 조절 후 문제

0 추천
case R.id.whSetbtn :
   edtext1.setWidth(Integer.parseInt(widthset.getText().toString()));
   edtext1.setHeight(Integer.parseInt(heightset.getText().toString()));
   infotext.setText("가로="+String.valueOf(edtext1.getWidth()+"px " +edtext1.getWidth()/3)+"dp, "
     + "세로="+ edtext1.getHeight()+"px " +edtext1.getHeight()/3+"dp"); 
   break;
  }

안녕하세요? 안드로이드 기초를 배우고 있는 학생입니다.

editText에 가로와 세로의 높이를 넣고 버튼 클릭하면 해당 사이즈로 변환하는 테스트를 하고 있습니다.
그런데 문제는 사이즈가 변환한 뒤 변환된 사이즈가 몇인지 알려줘야 하는데
이게 2번 터치를 해줘야 변환된 사이즈가 나오더군요.. 로그로 찍어봤는데

1회 터치시 사이즈는 변형되는데 변형된 사이즈의 값이 아닌 변형 전 사이즈값을 가져오고
2회 터치해야만 변형 후 사이즈값을 뷰에 찍어주더군요.. 왜 이런 문제가 생기는 건가요?
해결방법은 무엇이 있을까요?
고수님들 도움 부탁드립니다.
아래는 해당 코드 입니다.

 

실습위주 (430 포인트) 님이 2014년 7월 23일 질문

1개의 답변

+1 추천
 
채택된 답변

해당 메서드가 리턴되면 requestLayout이 요청되고 레이아웃이 변경되면 그때 변경된 값이 나옵니다.

아래와같이 포스트 시켜보세요.

 

edtext1.setWidth(Integer.parseInt(widthset.getText().toString()));
		edtext1.setHeight(Integer.parseInt(heightset.getText().toString()));
		edtext1.post(new Runnable() {
			
			@Override
			public void run() {
				infotext.setText("가로="+String.valueOf(edtext1.getWidth()+"px " +edtext1.getWidth()/3)+"dp, "
					     + "세로="+ edtext1.getHeight()+"px " +edtext1.getHeight()/3+"dp");
			}
		});

 

칠리님 (10,910 포인트) 님이 2014년 7월 23일 답변
실습위주님이 2014년 7월 23일 채택됨
여담인데... 저 3값은 density죠?
getResource.getDisplayMatrics().density 값을 이용하세요 ㅎ
와우! 감사합니다!!!
포스트라는게 뭔지 몰라서 사용을 못했네요;
감사감사감사합니다!!

3은 xxhdpi에서의 density값이 맞습니다..하하; 초보라서..
edtext1.getResource.getDisplayMatrics().density 를 사용하면되나요?
Context라면 뭐든지 가능합니다...
Activity.getResource()
Context.getResource()
View.getContext().getResource()

static 메서드 아닙니다... 해당 객체에서 호출하세용~
Activity도 ContextWrapper 를 상속하고 있어서 Context처럼 사용 가능합니다.
위 코드가 Activity안에 있다면

float mDensity;
onCreate(Bundle savedInstanceData){
        mDensity = getResource().getDisplayMetrics().density;
}

이렇게 하고 전역에서 사용하세용
지역에서 사용할꺼면 그때 그때 꺼내 쓰시구용
감사합니다! 친절하신 답변에 반했습니다!
좋은하루되세요^^
...