テキストサイズとさまざまなAndroid画面サイズ 質問する

テキストサイズとさまざまなAndroid画面サイズ 質問する

すでに 1000 回議論されていることは承知していますが、画面サイズに応じてテキスト サイズを調整することはできません。カスタム スタイルでサイズ単位として「sp」を使用するようにしています。

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

2.7 QVGAでは問題なく見えます:

2.7QVGA 30sp

しかし、7インチのWSVGAでは次のようになります。

7インチ WSVGA 30sp

「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"/>

ベストアンサー1

@forcelain これを確認する必要があると思いますGoogle IO デザイン用 PDFその PDF のページ番号 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 では、より個別の画面サイズのリソースを指定するための新しい方法が導入されています。新しい手法は、レイアウトを一般的なサイズ グループ (large や xlarge など) に合わせようとするのではなく、レイアウトに必要なスペースの量 (幅 600dp など) に基づいています。

一般的なサイズ グループを使用する場合、7 インチ タブレットの設計が難しいのは、7 インチ タブレットが技術的には 5 インチ ハンドセット (大きいグループ) と同じグループであるためです。これら 2 つのデバイスはサイズが似ているように見えますが、アプリケーションの UI のスペースの量やユーザー操作のスタイルは大きく異なります。したがって、7 インチと 5 インチの画面で常に同じレイアウトを使用する必要はありません。これら 2 種類の画面に異なるレイアウトを提供できるように、Android では、アプリケーションのレイアウトで実際に使用できる幅や高さ (dp 単位で指定) に基づいてレイアウト リソースを指定できるようになりました。

たとえば、タブレット スタイルのデバイスで使用するレイアウトを設計した後、画面の幅が 600 dp 未満になるとレイアウトが適切に機能しなくなると判断する場合があります。このしきい値は、タブレット レイアウトに必要な最小サイズになります。そのため、アプリケーションの UI に少なくとも 600 dp の幅がある場合にのみ、これらのレイアウト リソースを使用するように指定できるようになりました。

幅を選択してそれを最小サイズとして設計するか、レイアウトが完成したらサポートする最小の幅をテストする必要があります。

注: これらの新しいサイズ API で使用される数値はすべて密度非依存ピクセル (dp) 値であり、レイアウトの寸法も常に dp 単位で定義する必要があることに注意してください。これは、システムが画面密度を考慮した後に使用可能な画面スペースの量 (生のピクセル解像度を使用するのではなく) が重要だからです。密度非依存ピクセルの詳細については、このドキュメントの前半にある「用語と概念」を参照してください。新しいサイズ修飾子の使用

レイアウトに使用可能なスペースに基づいて指定できるさまざまなリソース構成を、表 2 にまとめます。これらの新しい修飾子を使用すると、従来の画面サイズ グループ (small、normal、large、xlarge) と比較して、アプリケーションがサポートする特定の画面サイズをより細かく制御できます。

注: これらの修飾子を使用して指定するサイズは、実際の画面サイズではありません。サイズは、アクティビティのウィンドウで使用できる dp 単位の幅または高さです。Android システムは、画面の一部をシステム UI (画面下部のシステムバーや上部のステータスバーなど) に使用することがあるため、画面の一部はレイアウトに使用できない場合があります。したがって、宣言するサイズは、アクティビティに必要なサイズにする必要があります。システムは、レイアウトに提供するスペースを宣言するときに、システム UI が使用するスペースを考慮します。また、アクションバーは、レイアウトで宣言されていなくても、アプリケーションのウィンドウスペースの一部と見なされるため、レイアウトに使用できるスペースが減るため、設計時に考慮する必要があります。

表2. 画面サイズの新しい設定修飾子(Android 3.2で導入)。画面設定修飾子の値説明smallestWidth swdp

例: sw600dp sw720dp

画面の基本サイズ。使用可能な画面領域の最短寸法で示されます。具体的には、デバイスの smallestWidth は、画面の使用可能な高さと幅の最短寸法です (画面の「最小の幅」と考えることもできます)。この修飾子を使用すると、画面の現在の向きに関係なく、アプリケーションの UI に少なくとも dps の幅が確保されます。

たとえば、レイアウトで画面領域の最小寸法が常に 600 dp 以上である必要がある場合は、この修飾子を使用してレイアウト リソース res/layout-sw600dp/ を作成できます。システムは、600 dp 側がユーザーが認識する高さか幅かに関係なく、使用可能な画面の最小寸法が 600 dp 以上である場合にのみこれらのリソースを使用します。smallestWidth はデバイスの固定画面サイズ特性です。デバイスの smallestWidth は画面の向きが変わっても変化しません。

デバイスの smallestWidth は、画面の装飾とシステム UI を考慮に入れます。たとえば、デバイスの画面上に、smallestWidth の軸に沿ったスペースを占めるいくつかの永続的な UI 要素がある場合、それらは UI に使用できない画面ピクセルであるため、システムは、実際の画面サイズよりも小さい smallestWidth を宣言します。

これは、UI で使用可能な有効サイズを個別の数値で定義できる、一般的な画面サイズ修飾子 (small、normal、large、xlarge) の代替手段です。smallestWidth を使用して一般的な画面サイズを決定すると便利です。これは、幅がレイアウト設計の原動力となることが多いためです。UI は垂直方向にスクロールすることがよくありますが、水平方向に必要な最小スペースにはかなり厳しい制約があります。使用可能な幅は、ハンドセットに 1 ペイン レイアウトを使用するか、タブレットにマルチペイン レイアウトを使用するかを決定する際の重要な要因でもあります。したがって、各デバイスで最小の幅がどの程度になるかが最も重要になります。使用可能な画面幅 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 の場合、次の 2 セットのレイアウトを提供できます。

res/layout/main_activity.xml # 携帯電話用 res/layout-sw600dp/main_activity.xml # タブレット用

この場合、タブレット レイアウトを適用するには、使用可能な画面スペースの最小幅が 600 dp である必要があります。

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以上)

前の 2 セットのサンプル リソースでは、「最小幅」修飾子 swdp が使用されていることに注意してください。これは、デバイスの現在の向きに関係なく、画面の 2 つの辺のうちの最小の幅を指定します。したがって、swdp を使用すると、画面の向きを無視して、レイアウトで使用できる全体的な画面サイズを簡単に指定できます。

ただし、場合によっては、レイアウトにとって重要なのは、現在使用可能な幅または高さの正確な量です。たとえば、2 つのフラグメントが並んでいる 2 ペイン レイアウトがある場合、デバイスが横向きか縦向きかに関係なく、画面に少なくとも 600 dp の幅がある場合は常にそれを使用することになります。この場合、リソースは次のようになります。

res/layout/main_activity.xml # 携帯端末用 (使用可能な幅が 600dp 未満) res/layout-w600dp/main_activity.xml # マルチペイン (使用可能な幅が 600dp 以上の画面)

2 番目のセットでは、「使用可能な幅」修飾子 wdp が使用されていることに注意してください。この方法では、画面の向きに応じて、1 つのデバイスが実際に両方のレイアウトを使用する場合があります (使用可能な幅が 1 つの向きで少なくとも 600dp で、他の向きで 600dp 未満の場合)。

利用可能な高さが気になる場合は、hdp 修飾子を使用して同じことを行うことができます。または、本当に具体的にする必要がある場合は、wdp 修飾子と hdp 修飾子を組み合わせることもできます。

おすすめ記事