안드로이드에서 화면 크기마다 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
:
- 에 포함
implementation 'com.intuit.sdp:sdp-android:1.0.5'
하십시오build.gradle
. 어떤 교체
dp
와 같은 값을50dp
A를@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
, windows
와 mac
. 여기서 밀도, 치수 등을 찾을 수 있습니다. 여기에 기반을두고 있으면 에뮬레이터를 사용하는 경우에도 좋은 리소스입니다.
특정 항목을 클릭하면 오른쪽에 자세한 내용이 표시됩니다.
~ 웹 사본을 저장하면 더 좋습니다. 오프라인으로 보려면
Android 3.2는 화면 크기에 대한 새로운 접근 방식을 도입했습니다. 화면 크기를 나타내는 숫자는 모두 "dp"단위입니다.
최소 너비 dp : "dp"단위로 응용 프로그램 레이아웃에 사용할 수있는 최소 너비입니다. 이것은 디스플레이 회전시 발생할 수있는 가장 작은 너비 dp입니다.
res >>> new >>> Android 리소스 디렉토리를 마우스 오른쪽 버튼으로 클릭하려면
에서 사용 가능한 예선 창 이동 작은 화면 폭 에 선택된 예선
에서 화면 폭 창 그냥 dimens를 사용하는 안드로이드 스튜디오를 원하는 당신에게서 시작 "DP"값을 작성합니다.
프로젝트 보기로 변경하는 대신 새로 작성된 자원 디렉토리를 마우스 오른쪽 단추로 클릭하십시오.
new >>> Values 리소스 파일 새 파일 이름 dimens.xml을 입력하면 완료됩니다.
'IT story' 카테고리의 다른 글
HttpURLConnection과 함께 POST를 사용하여 파일 보내기 (0) | 2020.07.18 |
---|---|
리스트 이해의 람다 함수 (0) | 2020.07.18 |
jQuery를 사용하여 요소 ID에 특정 텍스트가 포함 된 페이지에서 모든 요소 찾기 (0) | 2020.07.18 |
Entity Framework는 고유 이름을 선택합니다 (0) | 2020.07.18 |
BAT 스크립트의 상대 경로 (0) | 2020.07.18 |