[Android] 안드로이드에서 다른 화면 크기를 지원하는 방법


Answers

화면 크기가 다른 경우 다음은 작은 화면, 중간 크기, 높음 및 초 고밀도 화면에 대해 서로 다른 화면 크기와 다른 비트 맵 드로어 블에 대해 서로 다른 레이아웃 디자인을 제공하는 응용 프로그램의 리소스 디렉토리 목록입니다.

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

Manifest의 다음 코드는 모든 dpis를 지원합니다.

<supports-screens android:smallScreens="true" 
          android:normalScreens="true" 
          android:largeScreens="true"
          android:xlargeScreens="true"
          android:anyDensity="true" />

그리고 내 SO 답변을 확인해보십시오.

Question

안드로이드에서 앱을 개발 중이며 모든 화면 크기와 밀도를 지원해야합니다. 그래서 레이아웃을 위해 다른 폴더를 만들었습니다 : layout-small layout-large layout .

그런 다음 이미지 용으로 다른 폴더 인 ldpi, mdpihdpi . 모든 드로어 블 폴더에서 이미지의 크기가 서로 다르면 true입니까? 나는 화면 크기가 크고 밀도가 중간 크기 인 휴대 전화를 가지고 있기 때문에 이미지가 작아지고 크기가 적절하지 않다고 묻습니다.




안드로이드 조정 그것은 고해상도 장치 및 다른 장치에 대해 서로 다른 이미지를 사용하려는 경우 다른 폴더에 대해 별도의 이미지를 넣을 수 있습니다. 그렇지 않으면 단지 하나의 drawable, 레이아웃 폴더를 일부 이미지에만 넣으면 9 패치도 만들 수 있습니다.

여기를 읽으십시오.

여러 화면 지원 링크에 대한 매니페스트 권한이 필요 합니다.

<supports-screens android:resizeable=["true"| "false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>



dp 크기 단위 대신 sdp 크기 단위를 사용할 수 있습니다. sdp 크기 단위는 화면 크기에 비례하기 때문에 여러 화면 크기를 타겟팅하는 것이 좋습니다.

그것을 신중하게 사용하십시오! 예를 들어 대부분의 경우 여전히 태블릿에 대해 다른 레이아웃을 설계해야합니다.




그것은 여러 스크린 크기를 지원하는 것과 관련하여 높은 것으로 들립니다. 다음 gves가 더 나은 결과를 제공합니다.

res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp

디스플레이 측정 값을 사용하여 장치 너비와 높이 확인

디바이스의 결과 너비에 맞는 레이아웃을 배치하거나 계산합니다.

let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"

setContentView () 전에 모두 검사해야합니다. 그렇지 않으면 문제가 발생합니다.

     Configuration config = getResources().getConfiguration();

     Configuration config = getResources().getConfiguration();

        if (config.smallestScreenWidthDp >= 600) {
            setContentView(R.layout.layout-w600dp);
        } else {
            setContentView(R.layout.main_activity);
        }

맨 위에는 여러 개의 스크린을 맞추기 위해 너무 많은 레이아웃을 만들었습니다. 모두가 당신에 달려 있습니다. 그렇지 않은지도 모르겠군요. 어떤 API에서 플레이 스토어 리뷰를 볼 수 있습니다. 다운로드가 높습니다. 계속 진행해야합니다. .

도움이되기를 바랍니다. 제 3 자 라이브러리를 사용하는 사람이 거의 없었습니다. 작업량이 줄어들지는 않았지만 이는 최선의 방법은 아닙니다. Android 모범 사례에 익숙해집니다.

이것 좀 봐




안드로이드 3.2 (API 레벨 13)부터, 사용 가능한 화면 너비를 기반으로 화면 크기를 관리하기위한 새로운 기술을 선호하여 크기 그룹 (폴더를 작게, 보통, 크게, 크게)을 사용하지 않습니다.


레이아웃에 사용할 수있는 공간에 따라 지정할 수있는 다양한 리소스 구성이 있습니다.

1) 최소 너비 - 화면의 기본 크기로, 사용 가능한 화면 영역의 가장 짧은 크기로 표시됩니다.

한정어 값 : sw'dp value'dp

예 : res / sw600dp / layout.xml ->은 600dp보다 크거나 같은 모든 화면 크기에 사용됩니다. 장치 방향을 고려하지 않습니다.

2) 사용 가능한 화면 너비 - 리소스를 사용해야하는 최소 단위를 dp 단위로 지정합니다.

한정어 값 : w'dp value'dp

예 : res / w600dp / layout.xml ->은 600dp보다 크거나 같은 모든 화면에 사용됩니다.

3) 사용 가능한 화면 높이 - 리소스를 사용해야하는 최소 화면 높이를 dp 단위로 지정합니다.

한정어 값 : h'dp value'dp

예 : res / h600dp / layout.xml ->은 600dp 이상의 모든 화면에 사용됩니다.


결국 폴더 구조는 다음과 같이 보일 것입니다.

res / layout / layout.xml -> 핸드셋 용 (600dp 사용 가능 너비보다 작음)
res / layout-sw600dp / layout.xml -> 7 "태블릿 용 (600dp 너비 이상)
res / layout-sw720dp / layout.xml -> 10 인치 태블릿 용 (720dp 너비 이상)

자세한 내용은 공식 문서를 참조하십시오.
https://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts




@ud_an에 추가하기

레이아웃을위한 다른 폴더를 만드는 것은 좋은 습관이 아닙니다. 모든 화면 크기에서 잘 작동하도록 레이아웃을 만드십시오. 이를 달성하려면 레이아웃 속성을 사용하십시오. hdpi, mdpi 및 ldpi 유형에 대해 서로 다른 이미지 만 있으면됩니다. 나머지는 안드로이드 운영 체제에 의해 관리됩니다.




당신은 응용 프로그램이 실행될 코드의 해상도와 크기를위한 비트 맵을 만들 수 있습니다 (런타임에)

이 기사 확인 http://nuvornapps-en.blogspot.com.es/




화면의 크기를 동적으로 파악할 수 있습니다.

Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();

이 방법으로 얻은 너비와 높이를 사용하여 레이아웃을 설정할 수 있습니다.