안드로이드앱 View 크기 알아내기
페이지 정보
본문
안드로이드는 다양한 해상도를 가진 기기들을 소유하고 있습니다.
그래서 어떤 하나의 해상도에 맞춰 앱을 만들면 다른 해상도에서는 이상하게 보이는 현상이 발생할 수 있습니다.
그렇기 때문에 개발자들은 항상 모든 해상도를 고려해서 앱을 개발해야하는데,
해상도마다 xml을 여러개 만드는 방법도 있지만
여기서는 기기의 크기를 이용해서 비율로 해상도를 맞추는데 도움이 되는 메서드를 소개해보고자 합니다.
사실 이미 안드로이드는 DPI라는 것이 있습니다.
해상도가 각기 다른 기기들에게 똑같은 비율로 보여지게 하는 시스템이죠
DPI는 배수 개념인데, 실제 픽셀 크기에 DPI를 곱해져서 화면에 표시하게 됩니다.
예를 들어 DPI가 3.5인 안드로이드 기기와 2인 기기가 있고 20DP의 크기를 표현한다면
앞의 기기는 20 * 3.5로 실질적으로는 70의 크기가 되며 뒤의 기기는 20 * 2로 40의 크기가 되는 것입니다.
하지만 모든 기기의 가로 세로 크기가 다 같은 비율이지는 않습니다.
따라서 어느정도 오차는 계속 발생한다는 얘기입니다.
이때 앞에 말했듯이 각기 다른 해상도마다 맞춰진 크기를 제공한다면 Best이지만
수정할 때 따로따로 수정해야한다는 단점도 있고 번거롭기도 하니 java code 내에서 비율을 맞춰 주것입니다.
먼저 해당 기기의 해상도를 알아내는 메서드입니다.
((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
세로 크기는 getHieght()를 통해 알 수 있습니다.
추가로 get메서드를 통해 DPI 배수도 알 수 있습니다.
getX(), getY() : View의 왼쪽 상단 끝의 좌표 표시
getWidth(), getHieght() : View의 가로/세로 크기 표시
단, 이미지View는 getDrawable().getIntrinsicWidth()를 사용
마지막으로 혹시 View의 크기가 0으로 나온다면 이미지View를 getWidth 등의 메서드를 사용했거나
아직 View가 그려지기 전이었을 경우입니다.
이때는 더 뒤쪽의 생명주기에서 시도해보거나 아래와 같은 해결방법을 사용할 수 있습니다.
[해결법]
1.
textview.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
textview.getMeasured.Width();
textview.getMeasured.Height();
2. onWindowFocusChanged 함수 사용
-> window가 포커스를 잃을 경우 hasFocus가 false가 된다.
public void onWindowFocusChanged(boolean hasFocus){
int iwidth = findViewById(R.id.textview).getwidth();
}
- 이전글구글 플레이스토어 서명 KEY의 password를 잊어버렸다면 찾는 방법 19.08.04
- 다음글Chronometer 시간 계산하기 19.08.04
댓글목록
등록된 댓글이 없습니다.