[android] 다른 해상도 지원 안드로이드

수정 된 질문 :

모바일 해상도 :
다음 해상도와 같이 다른 화면 dpi를 디자인하고 싶습니다.

320×480,
480×800,
540×960,
720×1280 (삼성 S3),
1080×1920 (S4, Nexus5, Nexus 5x, Moto G4),
2560 x 1440 (Nexus 6, Nexus 6p, Samsung edge)

태블릿 해상도 :
480×800 (micromax),
600×1024 ( 삼성 tab2),
800×1280 (nexus 7),
1200×1920 (new nexus 7),
2048×1536 (nexus 9)

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

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

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

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

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



답변

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

모바일 해상도

  • 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를 올바르게 표시해야합니다.


답변

먼저 다른 화면에 대해 다른 값 폴더를 만들고 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" />


답변

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

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));

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


답변

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

<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 단위를 사용하면 글꼴 크기가 서로 다른 휴대폰에서 거의 같은 크기로 표시됩니다.


답변

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

예 : 모바일 해상도 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);


답변

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

텍스트 크기 및 다양한 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>


답변

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

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

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

tvTextView1.setTextSize(convertFromDp(24));