android에서 다른 화면 크기마다 dimens.xml을 정의하는 방법은 무엇입니까?


128

Android 에서 다양한 화면 크기 (밀도)를 지원할 때 종종 가능한 모든 화면에 대해 서로 다른 레이아웃을 만드는 데 중점을 둡니다. IE

  • ldpi
  • mdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

xhdpi 화면 의 레이아웃을 참조로 디자인하고 크기dimens.xml에 정의했습니다 . 이제 가능한 모든 화면 크기를 지원하고 싶습니다. 어떻게해야합니까?

내가 아는 한이 도구를 사용 하여 다른 화면 크기에 적합한 dimens.xml 을 파악하여 프로젝트에 추가 할 수 있습니다. 내 상황에서 이것이 올바른 방법입니까?

또 다른 질문 은 위의 화면 크기에 대해 dimens.xml 만 작성해야 합니까? 그렇다면 무엇 입니까?w820dp

당신의 도움을 주셔서 감사합니다. 전화 만 지원해야합니다 (태블릿 또는 기타 장치는 아님).


1
dimesn.xml, 다른 해상도 로 다른 파일 을 만들어야합니다 .
Piyush

@PiyushGupta 위의 모든 차원 스크린에 적용됩니까? 그러나 W820dp다른 안드로이드 버전을 지원하는 것은 무엇입니까? 또한 dimens.xml을 기반으로 다른 화면을 지원하는 방법에 대한 자습서를 제안 할 수 있습니까?
Amit Pal

태블릿 또는 다른 사람을위한 것입니다. 그렇지 않으면 내가 말했듯이 다른 값 폴더를 만들어야합니다.
Piyush

답변:


266

화면마다 다른 값 폴더 를 만들어야 합니다 . 처럼

values-sw720dp          10.1 tablet 1280x800 mdpi

values-sw600dp          7.0  tablet 1024x600 mdpi

values-sw480dp          5.4  480x854 mdpi 
values-sw480dp          5.1  480x800 mdpi 

values-xxhdpi           5.5"  1080x1920 xxhdpi
values-xxxhdpi           5.5" 1440x2560 xxxhdpi

values-xhdpi            4.7   1280x720 xhdpi 
values-xhdpi            4.65  720x1280 xhdpi 

values-hdpi             4.0 480x800 hdpi
values-hdpi             3.7 480x854 hdpi

values-mdpi             3.2 320x480 mdpi

values-ldpi             3.4 240x432 ldpi
values-ldpi             3.3 240x400 ldpi
values-ldpi             2.7 240x320 ldpi

여기에 이미지 설명을 입력하십시오

자세한 내용은 여기를 방문하십시오

안드로이드의 다른 값 폴더

http://android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html

@humblerookie에 의해 편집

Dimenify 라는 Android Studio 플러그인을 사용 하여 사용자 지정 배율을 기반으로 다른 픽셀 버킷의 치수 값을 자동으로 생성 할 수 있습니다 . 아직 베타 버전이므로 개발자에게 발생하는 모든 문제 / 제안 사항을 알려주십시오.


1
"values-sw480dp-hdpi".xhdpi 및 xxhdpi 등이 없어야합니까? 답은 320dp뿐입니다 .. 답장하십시오.
Sharp Edge

2
@IntelliJAmiya : Android <= 3.2와> 3.2의 차이점을 언급해야합니다.
juergen d

5
@IntelliJAmiya 나는 Dimenify라는 스튜디오 플러그인을 만들었습니다. 이를 통해 다른 버킷의 치수를 쉽게 만들 수 있습니다. 다른 사람이 사용할 수 있도록 편집 내용을 동일하게 추가 할 수 있습니까? plugins.jetbrains.com/androidstudio/plugin/9349-dimenify
humblerookie

3
이 Dimenify는 훌륭한 도구입니다
Muhammed Refaat

1
@IntelliJAmiya는 확실히 해당 폴더에 포함되지 않거나 특정 폴더에 적합하지 않은 새로운 릴리스가있을 것입니다.
ralphgabb

35

Scalable DP 사용

다른 화면 크기에 대해 다른 레이아웃을 만드는 것이 이론적으로 좋은 생각이지만 모든 화면 크기와 픽셀 밀도 를 수용하기가 매우 어려울 수 있습니다 . dimens.xml위의 답변에서 제안한 바와 같이 20 개 이상의 다른 파일 을 가지고 있으면 관리하기가 쉽지 않습니다.

사용하는 방법:

사용하려면 sdp:

  1. 에 포함 implementation 'com.intuit.sdp:sdp-android:1.0.5'하십시오 build.gradle.
  2. 어떤 교체 dp와 같은 값을 50dpA를 @dimen/50_sdp이렇게 같은 :

    <TextView
     android:layout_width="@dimen/_50sdp"
     android:layout_height="@dimen/_50sdp"
     android:text="Hello World!" />

작동 방식 :

sdp기본적으로 dimens.xml가능한 모든 dp값 마다 다른 목록이 많기 때문에 화면 크기에 따라 확장됩니다 .

여기에 이미지 설명을 입력하십시오

실제로보기 :

화면 크기와 밀도가 크게 다른 세 가지 장치가 있습니다.

여기에 이미지 설명을 입력하십시오

점을 유의 sdp사이즈 단위 연산으로 인해 약간의 성능 및 유용성을 제한 일부 근사치를 포함한다.


감사합니다. 이것은 나에게 정말 유용했습니다.
twenk11k

@Advait 2560x1440 해상도의 5.5 인치 모바일 삼성 엣지 7에 어떤 값 폴더를 사용해야하는지 알려주시겠습니까?
ULHAS PATIL

@ Advait은 현재 values-xxhdpi 폴더를 사용하고 있지만 문제는 5, 5.5 및 6 화면의 동일한 폴더에 대해 동일한 폴더를 사용하므로 5 인치 화면 및 5.5에 스크롤이 나타납니다. 나는 그것을 원하지 않습니다. 이것 좀 도와 주실 래요?
ULHAS PATIL

5.5 "5.5 또한 1080x1920 &"에 대한 @Advait은 S 값을-xxhdpi 인치 1440x2560 나는 5.5 "인치 1440x2560 다른 폴더합니다.
ULHAS PATIL

@ULHASPATIL 정확히! 비슷한 문제가 발생하여 해결 방법을 이해하지 못합니다. 비슷한 인치와 다른 픽셀 해상도를 가진 화면에 대한 해결책을 찾았습니까?
Georgiy Chebotarev

27

다른 화면에서 필요한보기 크기의 변경 사항을보고 싶습니다.

화면마다 다른 값 폴더를 만들고 화면 밀도에 따라 dimens.xml 파일을 넣어야합니다.

하나의 TextView를 가져 와서 다른 값 폴더에서 dimens.xml을 변경하면 변경 사항을 관찰했습니다.

과정을 따르십시오

일반-xhdpi \ dimens.xml

아래 장치는 표준을 변경할 때 화면 크기를 변경할 수 있습니다-xhdpi \ dimens.xml

넥서스 5X (5.2 "* 1080 * 1920 : 420dpi)

넥서스 6P (5.7 "* 1440 * 2560 : 560dpi)

넥서스 6 (6.0 "* 1440 * 2560 : 560dpi)

넥서스 5 (5.0 ", 1080 1920 : xxhdpi)

넥서스 4 (4.7 ", 768 * 1280 : xhdpi)

갤럭시 넥서스 (4.7 ", 720 * 1280 : xhdpi)

4.65 "720p (720 * 1280 : xhdpi)

4.7 "WXGA (1280 * 720 : Xhdpi)

Xlarge-xhdpi \ dimens.xml

Xlarge-xhdpi \ dimens.xml을 변경할 때 아래 장치에서 화면 크기를 변경할 수 있습니다

넥서스 9 (8.9 ", 2048 * 1556 : xhdpi)

넥서스 10 (10.1 ", 2560 * 1600 : xhdpi)

큰-xhdpi \ dimens.xml

아래의 장치는 큰 크기를 변경할 때 화면 크기를 변경할 수 있습니다-xhdpi \ dimens.xml

넥서스 7 (7.0 ", 1200 * 1920 : xhdpi)

넥서스 7 (2012) (7.0 ", 800 * 1280 : tvdpi)

아래 화면은 "일반 전화 및 태블릿 검색"에 표시됩니다.

큰-mdpi \ dimens.xml

큰 장치를 변경하면 아래 장치가 화면 크기를 변경할 수 있습니다-mdpi \ dimens.xml

5.1 "WVGA (480 * 800 : mdpi)

5.4 "FWVGA (480 * 854 : mdpi)

7.0 "WSVGA (태블릿) (1024 * 600 : mdpi)

일반-hdpi \ dimens.xml

아래 장치는 표준을 변경할 때 화면 크기를 변경할 수 있습니다-hdpi \ dimens.xml

넥서스 s (4.0 ", 480 * 800 : hdpi)

넥서스 원 (3.7 ", 480 * 800 : hdpi)

작은-ldpi \ dimens.xml

작은 장치를 변경할 때 아래 장치는 화면 크기를 변경할 수 있습니다-ldpi \ dimens.xml

2.7 "QVGA 슬라이더 (240 * 320 : ldpi)

2.7 "QVGA (240 * 320 : ldpi)

xlarge-mdpi \ dimens.xml

xlarge-mdpi \ dimens.xml을 변경하면 아래 장치에서 화면 크기를 변경할 수 있습니다

10.1 "WXGA (tABLET) (1280 * 800 : MDPI)

일반-ldpi \ dimens.xml

아래 장치는 표준을 변경할 때 화면 크기를 변경할 수 있습니다-ldpi \ dimens.xml

3.3 "WQVGA (240 * 400 : LDPI)

3.4 "WQVGA (240 * 432 : LDPI)

일반-hdpi \ dimens.xml

아래 장치는 표준을 변경할 때 화면 크기를 변경할 수 있습니다-hdpi \ dimens.xml

4.0 "WVGA (480 * 800 : hdpi)

3.7 "WVGA (480 * 800 : hdpi)

3.7 "FWVGA 슬라이더 (480 * 854 : hdpi)

일반-mdpi \ dimens.xml

아래 장치는 표준을 변경할 때 화면 크기를 변경할 수 있습니다-mdpi \ dimens.xml

3.2 "HVGA 슬라이더 (ADP1) (320 * 480 : MDPI)

3.2 "QVGA (ADP2) (320 * 480 : MDPI)


따라서 폴더에 따르면 폴더 이름이 values-normal-xhdpi?
VonSchnauzer

예, 나는 모든 파일에 값을 쓰는 대신 당신에게 동의합니다. "다른 텍스트 크기에 대해 다른 값의 폴더를 만듭니다". 제목을 읽으십시오. 감사.
koteswarao

9

모든 것을 처리하고 고통을 줄일 멋진 라이브러리가 있습니다. 그것을 사용하려면 gradle에 두 가지 종속성을 추가하십시오.

 implementation 'com.intuit.ssp:ssp-android:1.0.5'
 implementation 'com.intuit.sdp:sdp-android:1.0.5'

그 후 다음 dimens과 같이 사용 하십시오.

        android:layout_marginTop="@dimen/_80sdp"

3
: 여기에 참조 라이브러리입니다 SDPSSP는 . 이 정확한 답변에 감사드립니다!
JorgeAmVF

7

프로젝트 위치와 원하는 치수 파일을 입력으로 사용하는 간단한 Java 프로그램을 업로드했습니다. 이를 기반으로 콘솔에서 해당 차원 파일을 출력합니다. 여기에 링크가 있습니다 :

https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.java

참조를위한 전체 코드는 다음과 같습니다.

public class Main {


    /**
     * You can change your factors here. The current factors are in accordance with the official documentation.
     */
    private static final double LDPI_FACTOR = 0.375;
    private static final double MDPI_FACTOR = 0.5;
    private static final double HDPI_FACTOR = 0.75;
    private static final double XHDPI_FACTOR = 1.0;
    private static final double XXHDPI_FACTOR = 1.5;
    private static final double XXXHDPI_FACTOR = 2.0;

    private static double factor;

    public static void main(String[] args) throws IOException {


        Scanner in = new Scanner(System.in);
        System.out.println("Enter the location of the project/module");
        String projectPath = in.nextLine();

        System.out.println("Which of the following dimension file do you want?\n1. ldpi \n2. mdpi \n3. hdpi \n4. xhdpi \n5. xxhdpi \n6. xxxhdpi");

        int dimenType = in.nextInt();

        switch (dimenType) {
            case 1: factor = LDPI_FACTOR;
                break;
            case 2: factor = MDPI_FACTOR;
                break;
            case 3: factor = HDPI_FACTOR;
                break;
            case 4: factor = XHDPI_FACTOR;
                break;
            case 5: factor = XXHDPI_FACTOR;
                break;
            case 6: factor = XXXHDPI_FACTOR;
                break;
            default:
                factor = 1.0;
        }

        //full path = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml"
        //location of the project or module = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/"


        /**
         * In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here:
         */
        String fullPath = projectPath + "/src/main/res/values/dimens.xml";

        FileInputStream fstream = new FileInputStream(fullPath);
        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

        String strLine;

        while ((strLine = br.readLine()) != null)   {
            modifyLine(strLine);
        }
        br.close();

    }

    private static void modifyLine(String line) {

        /**
         * Well, this is how I'm detecting if the line has some dimension value or not.
         */
        if(line.contains("p</")) {
            int endIndex = line.indexOf("p</");

            //since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen
            int begIndex = line.indexOf(">");

            String prefix = line.substring(0, begIndex+1);
            String root = line.substring(begIndex+1, endIndex-1);
            String suffix = line.substring(endIndex-1,line.length());


            /**
             * Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number.
             */

            double dimens = Double.parseDouble(root);
            dimens = dimens*factor*1000;
            dimens = (double)((int)dimens);
            dimens = dimens/1000;
            root = dimens + "";

            System.out.println(prefix + " " +  root + " " + suffix );

        }

        System.out.println(line);
    }
}

6

values화면 마다 다른 폴더 를 만들고 dimens.xml밀도에 따라 파일을 넣어야 합니다.

1) values

2) values-hdpi (320x480 ,480x800)

3) values-large-hdpi (600x1024)

4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10)

5) values-sw480dp (5.1' WVGA screen)

6) values-xhdpi (Nexus4 , Galaxy Nexus)

화면 크기 사이의 배급량은 어디서 구할 수 있습니까? 도구에서 볼 수 있듯이 모든 방식 을 다음과 같이 정의했습니다 ldpi.mdpi
Amit Pal

그것은 당신의 가치 폴더에 달려 있습니다.
Piyush

values-xxhdpiNexus 6 에 대해 언급해야 하나요?
Amit Pal

예, 당신은해야합니다!
Piyush

320x480일반적인 mdpi 입니다. 그래서,에 하나 넣어 values또는에values-mdpi
Phantômaxx

6

당신은 넣을 수 있습니다 dimens.xml에서

1)

2) 값 -hdpi

3) 값-xhdpi

4) 값-xxhdpi

dimens.xml밀도에 따라 해당 폴더 내 에서 다른 크기를 지정하십시오 .


2
안드로이드 문서에 따르면 small / normal / large는 더 이상 사용되지 않습니다.
Benjamin Mesing

1

경우 당신은 더 많은 보려는 : 여기의 링크 를 포함하는 디바이스 (태블릿, 모바일, 시계)의 목록 watch, chromebook, windowsmac. 여기서 밀도, 치수 등을 찾을 수 있습니다. 여기에 기반을두고 있으면 에뮬레이터를 사용하는 경우에도 좋은 리소스입니다.

특정 항목을 클릭하면 오른쪽에 자세한 내용이 표시됩니다. 견본

이므로 Android관련 정보를 게시합니다. 샘플 1

샘플 2

~ 웹 사본을 저장하면 더 좋습니다. 오프라인으로 보려면


1

Android 3.2는 화면 크기에 대한 새로운 접근 방식을 도입했습니다. 화면 크기를 나타내는 숫자는 모두 "dp"단위입니다.

최소 너비 dp : "dp"단위로 응용 프로그램 레이아웃에 사용할 수있는 최소 너비입니다. 이것은 디스플레이 회전시 발생할 수있는 가장 작은 너비 dp입니다.

res >>> new >>> Android 리소스 디렉토리를 마우스 오른쪽 버튼으로 클릭하려면

에서 사용 가능한 예선 창 이동 작은 화면 폭선택된 예선

에서 화면 폭 창 그냥 dimens를 사용하는 안드로이드 스튜디오를 원하는 당신에게서 시작 "DP"값을 작성합니다.

프로젝트 보기로 변경하는 대신 새로 작성된 자원 디렉토리를 마우스 오른쪽 단추로 클릭하십시오.

new >>> Values ​​리소스 파일 새 파일 이름 dimens.xml을 입력하면 완료됩니다.


실제로 이러한 폴더를 만드는 방법에 대해 설명해 주셔서 감사합니다.
Beko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.