텍스트 크기 및 다양한 Android 화면 크기 <item name=”android:shadowRadius”>2</item> </style> 그리고 내

이미 1000 번 논의되었지만 화면 크기에 따라 텍스트 크기를 조정할 수 없습니다. 맞춤 스타일에서 크기 단위로 ‘sp’를 사용하려고합니다.

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    ...
    <item name="android:textSize">30sp</item>
    ...
</style>

2.7 QVGA에서는 괜찮아 보입니다.

2.7QVGA 30sp

그러나 7in WSVGA에서는 다음과 같이 보입니다.

동일한 결과로 ‘sp’와 ‘dp’를 모두 사용하려고했습니다.

이 버튼을 어떤 화면에서든 똑같이 보이게 만드는 방법을 설명해 주시겠습니까?

전체 맞춤 버튼 스타일

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">30sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">2</item>
</style>

그리고 내 응용 프로그램 테마에는

<item name="android:buttonStyle">@style/CustumButtonStyle</item>

그리고 내 레이아웃이 있습니다.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">

<Button
    android:id="@+id/buttonContinue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/buttonNewGame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonContinue"
    android:layout_alignRight="@+id/buttonContinue"
    android:layout_below="@+id/buttonContinue"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/ButtonAbout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonNewGame"
    android:layout_alignRight="@+id/buttonNewGame"
    android:layout_below="@+id/buttonNewGame"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>


답변

@forcelain 디자인을 위해이 Google IO PDF 를 확인해야한다고 생각합니다 . 그 pdf에서 Page No : 77로 이동하면 Android의 다른 장치에 대해 dimens.xml을 사용하는 방법을 찾을 수 있습니다. 아래 구조를 참조하십시오.

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

예를 들어 아래의 dimens.xml 값을 사용했습니다.

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

다른 값 폴더에서 텍스트 크기 값을 변경해야합니다.

참고 : @espinchi에서 알 수 있듯이 small, normal, large 및 xlarge는 Android 3.2부터 다음을 위해 더 이상 사용되지 않습니다.

Android 3.2 용 태블릿 레이아웃 선언

Android 3.0을 실행하는 1 세대 태블릿의 경우 태블릿 레이아웃을 선언하는 적절한 방법은 xlarge 구성 한정자가있는 디렉터리에 배치하는 것입니다 (예 : res / layout-xlarge /). 다른 유형의 태블릿 및 화면 크기 (특히 7 인치 태블릿)를 수용하기 위해 Android 3.2는보다 개별적인 화면 크기에 대한 리소스를 지정하는 새로운 방법을 도입했습니다. 새로운 기술은 레이아웃에 필요한 공간 (예 : 600dp 너비), 일반화 된 크기 그룹 (예 : large 또는 xlarge)에 맞게 레이아웃을 만들려고합니다.

일반화 된 크기 그룹을 사용할 때 7 “태블릿 용으로 설계하는 것이 까다로운 이유는 7″태블릿이 기술적으로 5 “핸드셋 (대규모 그룹)과 동일한 그룹에 속하기 때문입니다.이 두 장치는 크기가 서로 비슷해 보입니다. , 사용자 상호 작용 스타일과 마찬가지로 애플리케이션 UI 공간의 양이 크게 다릅니다. 따라서 7 인치 및 5 인치 화면이 항상 동일한 레이아웃을 사용해서는 안됩니다. 이러한 레이아웃에 대해 다른 레이아웃을 제공 할 수 있도록하려면 두 종류의 화면, Android에서는 이제 dp 단위로 지정된 애플리케이션의 레이아웃에 실제로 사용할 수있는 너비 및 / 또는 높이를 기반으로 레이아웃 리소스를 지정할 수 있습니다.

예를 들어 태블릿 스타일 기기에 사용할 레이아웃을 디자인 한 후 화면 너비가 600dp 미만일 때 레이아웃이 제대로 작동하지 않는지 확인할 수 있습니다. 따라서이 임계 값은 태블릿 레이아웃에 필요한 최소 크기가됩니다. 따라서 이제 애플리케이션 UI에 사용할 수있는 너비가 600dp 이상인 경우에만 이러한 레이아웃 리소스를 사용하도록 지정할 수 있습니다.

너비와 디자인을 최소 크기로 선택하거나 레이아웃이 완료되면 지원하는 가장 작은 너비를 테스트해야합니다.

참고 : 이러한 새로운 크기 API와 함께 사용되는 모든 수치는 밀도 독립적 픽셀 (dp) 값이며 레이아웃 크기도 항상 dp 단위를 사용하여 정의해야합니다. 관심은 시스템 이후에 사용할 수있는 화면 공간의 양이기 때문입니다. 화면 밀도를 고려합니다 (원시 픽셀 해상도 사용과 반대). 밀도 독립 픽셀에 대한 자세한 내용은이 문서 앞부분의 용어 및 개념을 참조하십시오. 새로운 크기 한정자 사용

레이아웃에 사용할 수있는 공간을 기반으로 지정할 수있는 다양한 리소스 구성이 표 2에 요약되어 있습니다. 이러한 새로운 한정자는 기존 화면 크기 그룹 (소형, 일반, 일반)과 비교하여 애플리케이션이 지원하는 특정 화면 크기를 더 잘 제어 할 수 있도록합니다. large 및 xlarge).

참고 : 이러한 한정자를 사용하여 지정하는 크기는 실제 화면 크기가 아닙니다. 오히려 크기는 활동 창에서 사용할 수있는 dp 단위의 너비 또는 높이입니다. Android 시스템은 시스템 UI에 일부 화면 (예 : 화면 하단의 시스템 표시 줄 또는 상단의 상태 표시 줄)을 사용할 수 있으므로 일부 화면을 레이아웃에 사용하지 못할 수 있습니다. 따라서 선언하는 크기는 특히 활동에 필요한 크기에 관한 것이어야합니다. 시스템은 레이아웃에 제공하는 공간을 선언 할 때 시스템 UI에서 사용하는 모든 공간을 고려합니다. 또한 작업 표시 줄은 레이아웃이 선언하지 않더라도 응용 프로그램 창 공간의 일부로 간주되므로 레이아웃에 사용할 수있는 공간이 줄어들고 디자인에서이를 고려해야합니다.

표 2. 화면 크기에 대한 새로운 구성 한정자 (Android 3.2에 도입 됨). 화면 구성 한정자 값 설명 smallestWidth swdp

예 : sw600dp sw720dp

사용 가능한 화면 영역의 가장 짧은 치수로 표시되는 화면의 기본 크기입니다. 특히 기기의 smallestWidth는 화면에서 사용할 수있는 높이와 너비 중 가장 짧은 값입니다 (화면의 ‘가능한 가장 작은 너비’라고 생각할 수도 있습니다). 이 한정자를 사용하여 화면의 현재 방향에 관계없이 응용 프로그램의 UI에 사용할 수있는 너비가 dps 이상인지 확인할 수 있습니다.

예를 들어 레이아웃에서 화면 영역의 최소 크기가 항상 600dp 이상이어야하는 경우이 한정자를 사용하여 레이아웃 리소스 res / layout-sw600dp /를 만들 수 있습니다. 시스템은 600dp면이 사용자가 인식하는 높이인지 너비인지에 관계없이 사용 가능한 화면의 최소 크기가 600dp 이상인 경우에만 이러한 리소스를 사용합니다. smallestWidth는 장치의 고정 된 화면 크기 특성입니다. 기기의 smallestWidth는 화면 방향이 변경 될 때 변경되지 않습니다.

기기의 smallestWidth는 화면 장식 및 시스템 UI를 고려합니다. 예를 들어 기기에 smallestWidth 축을 따라 공간을 차지하는 영구적 인 UI 요소가 화면에있는 경우 시스템은 smallestWidth를 실제 화면 크기보다 작게 선언합니다. 이는 UI에서 사용할 수없는 화면 픽셀이기 때문입니다.

이는 UI에 사용할 수있는 유효 크기에 대한 불연속적인 숫자를 정의 할 수있는 일반화 된 화면 크기 한정자 (작은, 보통, 큰, xlarge)의 대안입니다. 일반적인 화면 크기를 결정하기 위해 smallestWidth를 사용하는 것이 유용합니다. 너비는 종종 레이아웃을 디자인 할 때 동인 요소이기 때문입니다. UI는 종종 수직으로 스크롤되지만 수평으로 필요한 최소 공간에 상당히 엄격한 제약이 있습니다. 사용 가능한 너비는 핸드셋에 대해 단일 창 레이아웃을 사용할지 태블릿에 대해 다중 창 레이아웃을 사용할지 결정하는 주요 요소입니다. 따라서 각 장치에서 가능한 가장 작은 너비가 무엇인지에 가장 관심을 가질 것입니다. 사용 가능한 화면 너비 wdp

예 : w720dp w1024dp

리소스를 사용해야하는 최소 사용 가능한 너비를 값으로 정의하여 dp 단위로 지정합니다. UI에 사용할 수있는 현재 실제 너비를 반영하기 위해 화면의 방향이 가로와 세로 사이에서 전환 될 때 너비에 대한 시스템의 해당 값이 변경됩니다.

태블릿 장치에서도 가로 방향과 동일한 다중 창 레이아웃을 세로 방향으로 원하지 않기 때문에 다중 창 레이아웃을 사용할지 여부를 결정하는 데 유용합니다. 따라서 화면 크기와 방향 한정자를 함께 사용하는 대신이를 사용하여 레이아웃에 필요한 최소 너비를 지정할 수 있습니다. 사용 가능한 화면 높이 hdp

예 : h720dp h1024dp 등

리소스를 사용해야하는 최소 화면 높이 (값으로 정의 됨)를 dp 단위로 지정합니다. UI에 사용할 수있는 현재 실제 높이를 반영하기 위해 화면 방향이 가로와 세로 사이에서 전환 될 때 높이에 대한 시스템의 해당 값이 변경됩니다.

이를 사용하여 레이아웃에 필요한 높이를 정의하는 것은 화면 크기와 방향 한정자를 모두 사용하는 대신 wdp가 필요한 너비를 정의하는 것과 같은 방식으로 유용합니다. 그러나 대부분의 앱은 UI가 종종 세로로 스크롤되므로 사용 가능한 높이에 따라 더 유연하지만 너비는 더 엄격하다는 점을 고려할 때이 한정자가 필요하지 않습니다.

이러한 한정자를 사용하는 것은 화면 크기 그룹을 사용하는 것보다 더 복잡해 보일 수 있지만 실제로는 UI에 대한 요구 사항을 결정하면 더 간단해야합니다. UI를 디자인 할 때 가장 중요한 것은 애플리케이션이 핸드셋 스타일 UI와 여러 창을 사용하는 태블릿 스타일 UI간에 전환하는 실제 크기입니다. 이 스위치의 정확한 지점은 특정 디자인에 따라 다릅니다. 태블릿 레이아웃에 720dp 너비가 필요할 수도 있고, 600dp이면 충분하거나, 480dp이거나,이 사이의 숫자가 필요할 수도 있습니다. 표 2에서 이러한 한정자를 사용하여 레이아웃이 변경되는 정확한 크기를 제어 할 수 있습니다.

이러한 크기 구성 한정자에 대한 자세한 내용은 리소스 제공 문서를 참조하세요. 구성 예

다양한 유형의 장치에 대한 일부 디자인을 대상으로하는 데 도움이되도록 다음은 일반적인 화면 너비에 대한 몇 가지 수치입니다.

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7 tablet (600x1024 mdpi).
720dp: a 10 tablet (720x1280 mdpi, 800x1280 mdpi, etc).

표 2의 크기 한정자를 사용하면 애플리케이션에서 너비 및 / 또는 높이에 원하는 숫자를 사용하여 핸드셋 및 태블릿에 대한 다양한 레이아웃 리소스간에 전환 할 수 있습니다. 예를 들어 600dp가 태블릿 레이아웃에서 지원하는 사용 가능한 최소 너비 인 경우 다음 두 가지 레이아웃 세트를 제공 할 수 있습니다.

res / layout / main_activity.xml # 핸드셋 용 res / layout-sw600dp / main_activity.xml # 태블릿 용

이 경우 태블릿 레이아웃을 적용하려면 사용 가능한 화면 공간의 최소 너비가 600dp 여야합니다.

7 인치 및 10 인치 태블릿과 같은 크기를 구분하기 위해 UI를 추가로 사용자 지정하려는 다른 경우에는 최소 너비 레이아웃을 추가로 정의 할 수 있습니다.

res / layout / main_activity.xml # 핸드셋 용 (사용 가능한 너비가 600dp 미만) res / layout-sw600dp / main_activity.xml # 7 인치 태블릿 용 (600dp 너비 이상) res / layout-sw720dp / main_activity.xml

10 인치 태블릿 용 (폭 720dp 이상)

이전 두 세트의 예제 리소스는 기기의 현재 방향에 관계없이 화면의 양면 중 가장 작은 것을 지정하는 “가장 작은 너비”한정자 인 swdp를 사용합니다. 따라서 swdp를 사용하는 것은 화면 방향을 무시하여 레이아웃에 사용할 수있는 전체 화면 크기를 지정하는 간단한 방법입니다.

그러나 경우에 따라 레이아웃에 중요한 것은 현재 사용 가능한 너비 또는 높이의 정확한 양입니다. 예를 들어 두 개의 조각이 나란히있는 두 개의 창 레이아웃이있는 경우 기기가 가로 방향이든 세로 방향이든 상관없이 화면이 최소 600dp의 너비를 제공 할 때마다이를 사용할 수 있습니다. 이 경우 리소스는 다음과 같을 수 있습니다.

res / layout / main_activity.xml # 핸드셋 용 (사용 가능한 너비가 600dp 미만) res / layout-w600dp / main_activity.xml # 다중 창 (사용 가능한 너비가 600dp 이상인 모든 화면)

두 번째 집합은 “사용 가능한 너비”한정자 인 wdp를 사용하고 있습니다. 이렇게하면 화면의 방향에 따라 한 기기에서 실제로 두 레이아웃을 모두 사용할 수 있습니다 (사용 가능한 너비가 한 방향에서 600dp 이상이고 다른 방향에서 600dp 미만인 경우).

사용 가능한 높이가 문제가되는 경우 hdp 한정자를 사용하여 동일한 작업을 수행 할 수 있습니다. 또는 실제로 특정해야하는 경우 wdp 및 hdp 한정자를 결합 할 수도 있습니다.


답변

이 글에 답하기에는 너무 늦었다 고 생각합니다. 그러나 다른 해상도 장치를 통해 텍스트 크기 문제를 해결하는 방법이나 아이디어를 공유하고 싶습니다. 많은 안드로이드 개발자 사이트에서는 해상도 차이 장치의 텍스트 크기를 처리 할 텍스트 크기에 sp 단위 를 사용해야한다고 제안 합니다. 그러나 나는 항상 원하는 결과를 얻을 수 없습니다. 그래서 나는 지난 4-5 프로젝트에서 사용하고있는 하나의 솔루션을 찾았으며 잘 작동합니다. 내 제안에 따라 각 해상도 장치의 텍스트 크기를 배치해야하는데, 이는 약간 지루한 작업이지만 요구 사항을 충족시킬 것입니다. 각 개발자는 4 : 6 : 8 : 12 (각각 h : xh : xxh : xxxh) 와 같은 비율에 대해 들어야합니다 . 이제 프로젝트 res 폴더 안에 dimens 파일로 4 개의 폴더를 만들어야합니다.

  1. res / values-hdpi / dimens.xml
  2. res / values-xhdpi / dimens.xml
  3. res / values-xxhdpi / dimens.xml
  4. res / values-xxxhdpi / dimens.xml

이제 dimens.xml 파일 안에 텍스트 크기를 배치해야합니다. values-hdpi에 대한 코드를 보여주고 있습니다 . 마찬가지로 다른 해상도 값 /dimens.xml 파일에 대한 코드를 배치해야합니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">4px</dimen>
</resources>

다른 해상도의 경우 xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px와 같습니다. 이것은 위에서 쓴 비율 (3 : 4 : 6 : 8 : 12)으로 계산됩니다. 위의 비율로 다른 텍스트 크기 예제를 논의 해 보겠습니다. hdpi에서 12px의 텍스트 크기를 사용하려는 경우 다른 해상도에서는

  1. hdpi : 12px
  2. xhdpi : 18px
  3. xxhdpi : 24px
  4. xxxhdpi : 36px

이것은 모든 해상도에 필요한 텍스트 크기를 구현하는 간단한 솔루션입니다. 여기서는 values-mdpi 해상도 장치를 고려하지 않습니다 . 이 해상도에 대한 텍스트 크기를 포함하려는 사람이 있으면 비율은 3 : 4 : 6 : 8 : 12와 같습니다 . 질문이 있으면 알려주십시오. 사람들을 도울 수 있기를 바랍니다.


답변

때로는 세 가지 옵션 만있는 것이 좋습니다.

 style="@android:style/TextAppearance.Small"

일반 화면 크기와 구별하려면 작거나 크게 사용하십시오.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Small"/>

일반적으로 아무것도 지정할 필요가 없습니다.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

이를 사용하면 다양한 화면 크기에 대한 테스트 및 지정을 피할 수 있습니다.


답변

나는 차원별로 똑같이했고 (dp는 있지만 텍스트와 drawText ()에만 해당)

XML :

   <dimen name="text_size">30sp</dimen>

암호:

   Paint p =new Paint();
       p.setTextSize(getResources().getDimension(R.dimen.text_Size));

답변

거의 모든 기기 화면과 호환되는 텍스트 크기를 만드는 가장 쉬운 방법 인 아래 언급 된 Android 라이브러리를 누구나 사용할 수 있습니다. 실제로 화면 크기에 대한 새로운 Android 구성 한정자를 기반으로 개발되었습니다 (Android 3.2에 도입 됨) SmallestWidth swdp.

https://github.com/intuit/sdp


답변

API 26이있는 경우 autoSizeTextType 사용을 고려할 수 있습니다 .

<Button
  app:autoSizeTextType="uniform" />

기본 설정을 사용하면 TextView의 자동 크기 조정이 수평 및 수직 축에서 균일하게 조정됩니다.

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview


답변

각 화면 크기에 대해 여러 레이아웃 리소스를 추가하여 보관할 수 있다고 생각합니다. 예 :

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size with small text
res/layout-large/my_layout.xml       // layout for large screen size with larger text
res/layout-xlarge/my_layout.xml      // layout for extra large screen size with even larger text
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

참조 :
1. http://developer.android.com/guide/practices/screens_support.html