티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
How to get screen dimensions as pixels in Android
Android에서 화면 크기를 픽셀로 가져오는 방법
문제 내용
I created some custom elements, and I want to programmatically place them to the upper right corner (n
pixels from the top edge and m
pixels from the right edge). Therefore I need to get the screen width and screen height and then set position:
몇 가지 사용자 지정 요소를 만들었는데 프로그래밍 방식으로 오른쪽 상단 모서리(맨 위 가장자리에서 n픽셀, 오른쪽 가장자리에서 m픽셀)에 배치하려고 합니다. 따라서 화면 너비와 화면 높이를 얻은 다음 위치를 설정해야 합니다.
int px = screenWidth - m;
int py = screenHeight - n;
How do I get screenWidth
and screenHeight
in the main Activity?
메인 액티비티의 화면 너비 및 화면을 가져오려면 어떻게 해야 합니까?
높은 점수를 받은 Solution
If you want the display dimensions in pixels you can use getSize
:
표시 치수를 픽셀 단위로 지정하려면 getSize를 사용할 수 있습니다.
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
If you're not in an Activity
you can get the default Display
via WINDOW_SERVICE
:
액티비티가 아닌 경우 WINDOW_SERVICE를 통해 기본 디스플레이를 얻을 수 있습니다.
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
If you are in a fragment and want to acomplish this just use Activity.WindowManager (in Xamarin.Android) or getActivity().getWindowManager() (in java).
Fragment에 포함되어 있고 이 작업을 수행하려면 Activity.WindowManager 또는 getActivity().getWindowsManager() 사용하십시오.
Before getSize
was introduced (in API level 13), you could use the getWidth
and getHeight
methods that are now deprecated:
getSize가 API 레벨 13에 도입되기 전에는 현재 사용되지 않는 getWidth 및 getHeight 메서드를 사용할 수 있습니다.
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
For the use case, you're describing, however, a margin/padding in the layout seems more appropriate.
사용 사례의 경우, 설명하고 있지만 레이아웃의 여백/패딩이 더 적합한 것 같습니다.
Another way is: DisplayMetrics
다른 방법은 메트릭 표시입니다.
A structure describing general information about a display, such as its size, density, and font scaling. To access the DisplayMetrics members, initialize an object like this:
크기, 밀도 및 글꼴 크기 조정과 같은 디스플레이에 대한 일반적인 정보를 설명하는 구조입니다. DisplayMetrics 멤버에 액세스하려면 다음과 같은 개체를 초기화하십시오.
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
We can use widthPixels
to get information for:
widthPixels를 사용하여 다음에 대한 정보를 얻을 수 있습니다.
"The absolute width of the display in pixels."
"표시장치의 절대 너비(픽셀)."
Example:
예:
Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
API level 30 update
API 레벨 30 업데이트
final WindowMetrics metrics = windowManager.getCurrentWindowMetrics();
// Gets all excluding insets
final WindowInsets windowInsets = metrics.getWindowInsets();
Insets insets = windowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()
| WindowInsets.Type.displayCutout());
int insetsWidth = insets.right + insets.left;
int insetsHeight = insets.top + insets.bottom;
// Legacy size that Display#getSize reports
final Rect bounds = metrics.getBounds();
final Size legacySize = new Size(bounds.width() - insetsWidth,
bounds.height() - insetsHeight);
가장 최근 달린 Solution
Much simpler in Kotlin.
코틀린에서는 훨씬 간단합니다.
val displayMetrics = Resources.getSystem().displayMetrics
displayMetrics.heightPixels
displayMetrics.widthPixels
출처 : https://stackoverflow.com/questions/1016896/how-to-get-screen-dimensions-as-pixels-in-android
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드 애플리케이션에서 액티비티 사이에 데이터 전달하기 (0) | 2022.12.02 |
---|---|
안드로이드 CalledFromWrongThreadException 수정하기 (0) | 2022.12.02 |
기본 앱을 사용하지 않고 JavaMail API로 이메일 보내기 (0) | 2022.12.01 |
패키지 이름과 일치하는 클라이언트를 찾을 수 없습니다(Google Analytics) (0) | 2022.12.01 |
웹뷰 net::ERR_CACHE_MISS 오류 메시지 (0) | 2022.12.01 |