IT story

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

hot-time 2020. 7. 18. 09:57
반응형

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


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

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

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

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

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

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


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

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


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사이즈 단위 연산으로 인해 약간의 성능 및 유용성을 제한 일부 근사치를 포함한다.


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

화면마다 다른 값 폴더를 만들고 화면 밀도에 따라 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화면 마다 다른 폴더 를 만들고 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)

프로젝트 위치와 원하는 치수 파일을 입력으로 사용하는 간단한 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);
    }
}

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

1)

2) 값 -hdpi

3) 값-xhdpi

4) 값-xxhdpi

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


모든 것을 처리하고 고통을 줄일 멋진 라이브러리가 있습니다. 그것을 사용하려면 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"

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

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

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

샘플 2

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


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

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

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

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

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

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

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

참고 URL : https://stackoverflow.com/questions/32860815/how-to-define-dimens-xml-for-every-different-screen-size-in-android

반응형