다른 해상도 지원 안드로이드


80

수정 된 질문 :

모바일 해상도 :
다음 해상도와 같이 다른 화면 dpi를 디자인하고 싶습니다.
320x480,
480x800,
540x960,
720x1280 (삼성 S3),
1080x1920 (S4, Nexus5, Nexus 5x, Moto G4),
2560 x 1440 (Nexus 6, Nexus 6p, Samsung edge)

태블릿 해상도 :
480x800 (micromax),
600x1024 ( 삼성 tab2),
800x1280 (nexus 7),
1200x1920 (new nexus 7),
2048x1536 (nexus 9)

장치 디스플레이 해상도에 따라 다른 글꼴 크기 를 사용하고 싶습니다 .

Q1) best이 문제를 해결 하는 방법 은 무엇입니까 problem?

Q2) 던지기 코딩이나 XML을 수행하는 가장 좋은 방법은 무엇입니까?

Q3) 어떤 드로어 블 폴더가 어떤 장치 해상도를 나타 냅니까?

Q4) 다른 해상도에 대한 응용 프로그램 실행기 아이콘 크기?


16
화면 해상도는 중요하지 않습니다. 화면 밀도가 중요합니다.
CommonsWare

2
[this SO answer] [1]을 살펴보고 코드를 시도해보십시오. [1] : stackoverflow.com/questions/9877946/…
JJ86 2013 년

사소한 수정으로 질문을 올리지 마십시오. 계속되면 질문을 잠급니다.
Brad Larson

2
@Sotti : 화면 크기! = 화면 해상도.
CommonsWare

1
@Sotti : 내 의견을 읽으면 화면 해상도가 중요하지 않다고 썼다는 것을 알 수 있습니다. 나는 화면 크기가 중요하지 않다고 쓰지 않았습니다.
CommonsWare

답변:


189

다른 해상도의 앱 실행기 아이콘 크기 (픽셀)

모바일 해상도

  • mipmap-mdpi (48X48)
  • mipmap-hdpi (72X72)
  • mipmap-xhdpi (96X96)
  • mipmap-xxhdpi (144X144)
  • mipmap-xxxhdpi (192X192)

태블릿 레이아웃 :

태블릿 전용 레이아웃을 원하는 경우 다음 폴더를 사용하십시오.

layout-large-mdpi   (1024x600)
layout-large-tvdpi  (800x1280)
layout-large-xhdpi  (1200x1920)
layout-xlarge-mdpi  (1280x800)
layout-xlarge-xhdpi (2560x1600)

드로어 블 폴더 :

  1. 변하기 쉬운

    res/drawable        (default)
    res/drawable-ldpi/  (240x320 and nearer resolution)
    res/drawable-mdpi/  (320x480 and nearer resolution)
    res/drawable-hdpi/  (480x800, 540x960 and nearer resolution)
    res/drawable-xhdpi/  (720x1280 - Samsung S3, Micromax Canvas HD etc)
    res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
    res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge).
    
  2. 태블릿 해상도 : 여기에 이미지 설명 입력

    글꼴 크기 :

참고 : 다음textSize 과 같이 처리 할 때마다 항상 SP를 사용하십시오.textsize=12sp

  1. 미리 정의 된 사용 textAppearance:

    장치 밀도에 따라 텍스트 크기를 자동으로 설정합니다.

    <TextView android:textAppearance="?android:attr/textAppearanceSmall"/>
    <TextView android:textAppearance="?android:attr/textAppearanceMedium"/>
    <TextView android:textAppearance="?android:attr/textAppearanceLarge" />
    

    샘플 사용법 :

    <TextView
        style="@android:style/TextAppearance.Small"
        android:text="Sample Text - Small" />
    <TextView
        style="@android:style/TextAppearance.Medium"
        android:text="Sample Text  - Medium" />
    <TextView
        style="@android:style/TextAppearance.Large"
        android:text="Sample Text  - Large" />
    
  2. 사용하여 dimension.xml각 장치에 대해 :

    에서 구글 IO PDF 파일 , 우리는 구조 아래를 참조하십시오 :

    1. 변하기 쉬운:

      res/values/dimens.xml(default)
      res/values-ldpi/dimens.xml   (240x320 and nearer resolution)
      res/values-mdpi/dimens.xml   (320x480 and nearer resolution)
      res/values-hdpi/dimens.xml   (480x800, 540x960 and nearer resolution)
      res/values-xhdpi/dimens.xml  (720x1280 - Samsung S3, Micromax Canvas HD, etc)
      res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)
      

      res / values-xxxhdpi / dimens.xml (1440X2560-Nexus 6, Samsung S6edge).

    2. 태블릿:

      태블릿의 경우 values-xlarge, values-large.

      res/values-large/dimens.xml      (480x800)
      res/values-large-mdpi/dimens.xml (600x1024)
      

      또는

      res/values-sw600dp/dimens.xml      (600x1024)
      res/values-sw720dp/dimens.xml      (800x1280)
      res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10")
      res/values-large-xhdpi/dimens.xml  (1200x1920 - Nexus 7"(latest))
      

추가 정보 :

  1. 다중 화면 지원을 참조하십시오 .

  2. 디자인 장치 밀도에 대해서는 Google IO Pdf의 77 페이지를 참조하십시오 . 그 안에서 다양한 장치 를 처리하는 방법을 찾을 수 있습니다.dimens.xml

  3. 에 대한 내 앱 준비하기 넥서스 6 넥서스 9 .

다중 화면 지원 에서 발췌 :

밀도 독립 픽셀은 160dpi 화면의 물리적 픽셀 하나와 동일하며, 이는 시스템에서 "중간" 밀도 화면에 대해 가정하는 기준 밀도 입니다. 런타임시 시스템은 사용중인 화면의 실제 밀도에 따라 필요에 따라 dp 단위의 모든 크기 조정을 투명하게 처리합니다. dp 단위를 화면 픽셀로 변환하는 방법은 간단 px = dp * (dpi / 160)합니다.. 예를 들어 240dpi 화면에서 1dp는 물리적 픽셀 1.5와 같습니다. 애플리케이션의 UI를 정의 할 때 항상 dp 단위를 사용하여 밀도가 다른 화면에 UI를 올바르게 표시해야합니다.


3
그래서 실제로 코드를 구현할 필요가 없습니까? 치수를 생성하면 앱이 적용 할 치수를 자동으로 확인합니까?
John R

1
+1 : 레이아웃을 사용하여 모든 장치를 지원할 수 있다는 것을 잊지 마십시오.
S.M_Emamian

1
@ S.M_Emamian 태블릿 용 : 1024X600 (layout-large-mdpi) 800X1280 (layout-large-tvdpi) 1200X1920 (layout-large-xhdpi) 1280X800 (layout-xlarge-mdpi) 2560X1600 (layout-xlarge-xhdpi) 체크인하십시오 시뮬레이터보다는 장치.
Bhavesh Jethani

2
아래 링크가 도움이 될 수도 있는지 확인하십시오. stackoverflow.com/questions/14151121/...
Bhavesh Jethani 보낸 사람에게


28

먼저 다른 화면에 대해 다른 값 폴더를 만들고 res->values->dimens.xml파일에 화면에 따라 크기를 입력하고 "@dimen/text_size".

res/values/dimens.xml    
res/values-small/dimens.xml    
res/values-normal/dimens.xml    
res/values-xlarge/dimens.xml

//for small    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">15sp</dimen>
</resources>

//for normal    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">20sp</dimen>
</resources>

//for large    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">30sp</dimen>
</resources>

//for xlarge    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">40sp</dimen>
</resources>

TextView아래와 같이 글꼴 크기를 검색합니다 .

<TextView
    android:id="@+id/lblHeader"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"           
    android:textSize="@dimen/text_size"
    android:textStyle="bold"
    android:typeface="serif" />

그래서 여기에 diff 레이아웃에 대한 치수를 어떻게 지정 했습니까? u는 비율을 사용했습니다 (1 : 1.5 : 2 : 3 : 4)-(mdpi-hdpi : xhdpi : xxhdpi : xxxhdpi)-(2sp : 3sp : 4sp : 6sp : 8sp) 이렇게 헷갈리네요 ..!
Asif Sb

@AsifSb 당신은 당신이 당신이 가치 폴더에 다른 diemens.xml 정적 방법으로 dimentions을 넣어야 할 programatically.Otherwise 설정해야 할 비율을주기 위하여려고하는 경우
PankajSharma

9

화면 해상도와 밀도가 다른 문제를 방지하기 위해 화면의 너비와 높이 비율을 기준으로 모든 항목의 크기와 위치를 지정합니다. 화면의 너비 또는 높이 비율에 따라 텍스트 크기가 조정되면 글꼴은 모든 장치와 모든 해상도에서 올바른 크기가됩니다. 공간의 너비와 높이를 기준으로 올바른 글꼴 크기를 얻으려면 다음 함수를 사용하면됩니다.

private float SetTextSize(String text, int width, int height)
{
    Paint paint = new Paint();
    float textWidth = paint.measureText(text);
    float textSize = (int) ((width / textWidth) * paint.getTextSize());
    paint.setTextSize(textSize);

    textWidth = paint.measureText(text);
    textSize = (int) ((width / textWidth) * paint.getTextSize());

    // Re-measure with font size near our desired result
    paint.setTextSize(textSize);

    // Check height constraints
    FontMetricsInt metrics = paint.getFontMetricsInt();
    float textHeight = metrics.descent - metrics.ascent;
    if (textHeight > height)
    {
        textSize = (int) (textSize * (height / textHeight));
        paint.setTextSize(textSize);
    }
    return textSize;
}

다음은 화면의 너비와 높이를 가져 오는 코드입니다.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
    Point size = new Point();
    getWindowManager().getDefaultDisplay().getSize(size);
    screenWidth = size.x;
    screenHeight = size.y; 
}
else
{
    Display display = getWindowManager().getDefaultDisplay(); 
    screenWidth = display.getWidth(); 
    screenHeight = display.getHeight(); 
}

원하는 글꼴 크기를 얻으려면 화면 너비와 화면 높이를 기준으로 영역을 구성하고 글꼴 크기가 올바르게 보일 때까지 조정하면됩니다. 제대로 보이면 모든 장치에서 제대로 보이게됩니다.

float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));

도움이 되었기를 바랍니다.


1
Re " .. 화면 너비 / 높이 비율 ". 참고 :이 전략은 완벽한 항목의 고정 번호가 화면에 대한; 항목의 스크롤 목록을 표시하는 화면에서 대형 전화기의 경우 "큰"과 "더 많은 행 표시"사이의 절충안을 선호합니다. 가능한 공식은 모든 글꼴 크기에를 곱하는 것입니다 sqrt(phoneWidthInches / defaultWidthInches). 여기서는 defaultWidthInches디자인하는 원래 휴대 전화 크기입니다. 따라서 2 배 더 큰 폰은 1.4 배 더 큰 글꼴이 될 것입니다. (대신 height또는 diagonal적절한 공식을 사용하십시오). 중요 : 너비를 픽셀 단위로 사용하지 마십시오 . inches = pixels / dpi.
ToolmakerSteve

8

기본적으로 다음과 같은 텍스트 스타일을 만들어야합니다.

<style name="CodeFont">
    <item name="android:textSize">30sp</item>
</style>

여기 http://developer.android.com/guide/topics/ui/themes.html 에 대해 자세히 알아보십시오.

다양한 화면에 대한 Android 지원 가이드를 사용하여 http://developer.android.com/guide/practices/screens_support.html에 설명 된대로 올바른 해상도 폴더에서 다양한 화면에 대해 원하는 다양한 크기를 만듭니다.

참고 : 어떤 상황에서 그렇게 하려는지 잘 모르겠습니다. 글꼴 크기에 SP 단위를 사용하면 글꼴 크기가 서로 다른 휴대폰에서 거의 같은 크기로 표시됩니다.


4

먼저 하나의 해상도를위한 애플리케이션 디자인.

예 : 모바일 해상도 380 * 480을 가정합니다.

       mobile screen width:380

       textView size is 80dp   
       Assume : if width is 380dp then 100 % then

               textview width 80dp then how many %(per).

            ower answer is: 25 %

belove 공식을 사용하여 프로그래밍 방식으로 화면 크기 찾기

    DisplayMetric  displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    ScreenHeight = displaymetrics.heightPixels;
    ScreenWidth = displaymetrics.widthPixels;
        txt_height = (int)((ScreenHeight*14.58)/100);
    txt_width = (int)((ScreenWidth*37.5)/100);


    LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width );

    txt_Name.setLayoutParams(normal_param);

다른 장치 크기에 대한 텍스트 크기를 제공하고 싶습니다.
Bhavesh Jethani

@BhaveshJethani는 위의 코드를 사용하여 textsize 백분율을 계산하고 코드가 나를 위해 작동합니다.
Hemantvc 2013 년

3
난 .. 글꼴 크기에 대해하지 텍스트 뷰의 크기를 이야기하고
Bhavesh Jethani 보낸

3

나는 이것이 좋은 대답이라고 생각합니다.

텍스트 크기 및 다양한 Android 화면 크기

그러나 여기에서 화면 해상도로 어떻게 할 수 있습니까?

다음과 같은 각 해결 방법에 대해 "값"리소스 디렉터리를 만들 수 있습니다.

values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp

각 dir (기본값 dir 포함)에서 내용이있는 "dimens.xml"이라는 파일을 만듭니다.

 for exmaple (the value related to the resolution):
 <dimen name="def_font_size">10sp</dimen>

이제 "@ dimen / def_font_size"를 사용하거나 기본값 디렉토리에 스타일을 만들 수 있습니다.

"styles.xml"에 다음을 추가하십시오.

<style name="FontSize">
    <item name="android:textSize">@dimen/def_font_size</item>
</style>

1

화면 크기에 따라 dp의 크기를 크기로 변환하는 기능을 만들었으며 잘 작동합니다. 화면에 따라 텍스트 크기에 문제가있는 사람은 이것을 시도해야합니다.

public float convertFromDp(int input) {
    final float scale = getResources().getDisplayMetrics().density;
    return ((input - 0.5f) / scale);
}

다음과 같이 프로그래밍 방식으로 텍스트보기 크기에 주어진 값을 간단히 제공하십시오.

tvTextView1.setTextSize(convertFromDp(24));

이 대답은 나를 위해 일합니다. 작업 부하 및 계산 감소
란 지트 쿠마르

1

nexus 6 기기 지원을 위해 drawable-560dpi 폴더를 만들고 모든 이미지를 그 안에 넣습니다.


나는 그것의 필요와 좋지 않아 그런 특정 레이아웃, 그러나 당김-xxxhdpi이 될 것입니다 수 있도록 생각보다 쉽고 도움이
Abhilash

넥서스 6에는 해당되지 않습니다. 넥서스 6의 해상도는 560dpi이기 때문입니다. 560dpi 폴더를 선언하지 않으면 xxxhdpi 폴더의 이미지를 사용합니다.
아난드 Savjani

네, 간단하게하기 위해 넥서스 6만을 제안했습니다. 이미지는 크게 다르지 않으므로 xxxhdpi가 더 쉽습니다.
Abhilash
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.