1. ホーム
  2. android

[解決済み] 文字サイズとアンドロイドの画面サイズの違い

2022-07-11 17:03:59

質問

すでに1000回以上議論されていることだと思いますが、異なるスクリーンサイズに対してテキストサイズを調整することができません。私はカスタムスタイルでサイズの単位として'sp'を使用しようとしています。

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

2.7 QVGAでは問題ないようです。

しかし、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 for Design . そのPDFのページ番号:77に移動し、あなたはそこに例として、アンドロイドの異なるデバイスのための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氏の指摘により、Android 3.2以降、small, normal, large, xlargeは非推奨となり、以下のものが採用されています。

Android 3.2 のタブレット レイアウトを宣言する

Android 3.0 を実行する最初の世代のタブレットでは、タブレットのレイアウトを宣言する適切な方法は タブレット レイアウトを宣言する適切な方法は、xlarge 構成修飾子を持つディレクトリに置くことでした (たとえば、res/layout-xlarge/)。 xlarge 設定修飾子 (たとえば、res/layout-xlarge/) の付いたディレクトリに置くことでした。しかし 他の種類のタブレットや画面サイズに対応するために Android 3.2では、他の種類のタブレットや画面サイズ、特に7"タブレットに対応するために、より個別の画面サイズのリソースを指定する新しい方法が導入されました。 リソースを指定する新しい方法を導入しました。この新しい方法は レイアウトに必要なスペースの量(幅600dpなど)に基づいています。 一般的なサイズグループ(largeやxlargeなど)にレイアウトを合わせるのではなく (large や xlarge のような) 一般的なサイズグループにレイアウトを合わせるのではなく、レイアウトが必要とするスペースの量に基づいています。

7" のタブレット用にデザインすることが、一般化されたサイズ グループを使用する際に厄介なのは 一般化されたサイズ グループを使用する場合、7 インチ タブレット用のデザインが厄介なのは、7 インチ タブレットが技術的に 5 インチ タブレットと同じグループであるためです。 グループ (大グループ) に含まれるからです。この2つのデバイスは、一見するとサイズが近いのですが この2つのデバイスは、一見するとサイズが近いように見えますが、アプリケーションのUIに使えるスペースが大きく異なります。 アプリケーションのUIのスペースや、ユーザーとのインタラクションのスタイルが大きく異なります。 といった違いがあります。そのため、7インチと5インチでは、必ずしも同じレイアウトで表示させるべきではありません。 のレイアウトを使用するべきではありません。このため、7インチと5インチの画面では異なるレイアウトを提供する必要があります。 Androidでは、この2種類の画面に対して異なるレイアウトを提供できるように、幅や高さに基づいて レイアウトリソースは、アプリケーションのレイアウトに実際に利用可能な幅や高さに基づいて指定できます。 Android では、dp 単位で指定された、アプリケーションのレイアウトで実際に使用可能な幅および/または高さに基づいて、レイアウト リソースを指定できます。

たとえば、タブレット型端末で使用するレイアウトを設計した後、アプリケーションのレイアウトに使用できる幅および/または高さを dp 単位で指定できます。 タブレット型デバイスに使用するレイアウトを設計した後、そのレイアウトが画面の大きさが レイアウトがうまく機能しないと判断することがあります。この閾値 が、タブレット端末用レイアウトに必要な最小サイズになります。 このため、これらのレイアウトリソースは、画面の幅が600dp以上の場合にのみ使用するよう指定できます。 アプリケーションのUIに少なくとも600dpの幅があるときだけ使用するように指定できます。 アプリケーションの UI に使用できる幅が少なくとも 600dp ある場合にのみ、これらのレイアウト リソースを使用するように指定できます。

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

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

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

注意:これらの修飾子を用いて指定したサイズは、実際の画面サイズではありません。 実際の画面サイズではありません。むしろ、サイズは、アクティビティーのウィンドウで利用可能な dp単位で、アクティビティのウィンドウで利用可能です。Android システムでは、画面の一部をシステムUIに使用する場合があります(画面下部のシステムバーや バーや上部のステータスバーなど)、そのため画面の一部が はレイアウトに使用できない場合があります。そのため、サイズ で必要とされるサイズに限定して宣言する必要があります。 システムは、システムUIが使用するスペースを考慮した上で システムは、レイアウトのためにどれだけのスペースを提供するかを宣言するときに、システムUIによって使用されるスペースを考慮します。また、次のことにも注意してください。 アクション・バーは、アプリケーションのウィンドウの一部とみなされます。 レイアウトで宣言されていないにもかかわらず、アクション・バーはアプリケーションのウィンドウ・スペースの一部とみなされるため、レイアウトに利用できるスペースが減少します。 そのため、レイアウトに使用できるスペースが減少するので、それを考慮に入れて設計する必要があります。 デザインで考慮する必要があります。

表 2. 画面サイズに関する新しい設定修飾子(Android 3.2で導入 Android 3.2 で導入)。画面構成 Qualifier values Description 最小幅swdp

例:sw600dp sw720dp

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

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

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

これは、一般的な画面サイズ修飾子(small、normal、large、xlarge)に代わるものです。 (small、normal、large、xlarge) の代替となるもので、UI で利用可能な有効サイズの個別の数値を定義することができます。 UI で利用可能な有効なサイズの数値を定義することができます。使用方法 を使用して一般的な画面サイズを決定すると便利です。 幅は、レイアウト設計の原動力となることが多いからです。UIは UIはしばしば垂直方向にスクロールしますが、水平方向に必要な最小スペースにはかなり厳しい制約があります。 水平方向に必要な最小限のスペースにかなり厳しい制約があります。また、利用可能な幅は 携帯電話向けのワンペインレイアウトか、マルチペインレイアウトかを決定する重要な要素です。 を使うか、タブレット端末用にマルチペインレイアウトを使うかを決める重要な要素です。そのため、最も気になるのは 各デバイスで可能な最小の横幅がどの程度になるかを最も気にすることになります。 利用可能な画面幅 wdp

例: w720dp w1024dp

リソースが利用可能な最小の幅をdp単位で指定します。 を指定します。システムで対応する 幅の値は、画面の向きが横と縦の間で切り替わったときに、システムに対応する値が変化します。 UIで利用可能な実際の幅を反映するために、画面の向きが横向きと縦向きの間で切り替わると、幅に対応するシステムの値が変化します。 を反映します。

これは、マルチペインレイアウトを使用するかどうかを決定するためによく役に立ちます。 タブレット端末であっても、多くの場合、縦方向と横方向で同じマルチ ペイン レイアウトを使用することはないでしょうから。 タブレット端末であっても、横向きと同じマルチ ペイン レイアウトを縦向きで使用したいとは思わないでしょう。 そのため、これを使用して、レイアウトに必要な最小幅を指定することができます。 レイアウトに必要な最小の幅を指定します。 修飾子を一緒に使用する代わりに、この修飾子を使用してレイアウトに必要な最小幅を指定することができます。利用可能な画面の高さ hdp

例:h720dp h1024dp など。

リソースが使用される画面の高さの最小値を dp 単位で指定する。 で指定する。システムの対応する 高さの値は、画面の向きが横向きと縦向きに切り替わったときに、現在の実際の高さを反映し UIで利用可能な現在の実際の高さを反映するために、画面の向きが横向きと縦向きの間で切り替わると、高さに対応するシステムの値が変化します。 UIで利用可能な現在の実際の高さを反映します。

レイアウトに必要な高さを定義するためにこれを使用すると、必要な幅を定義するためのwdpと同じ方法で便利です。 必要な幅を定義するためのwdpと同じ方法で、代わりに 画面サイズと方向の修飾子の両方を使用する代わりに、必要な幅を定義するための wdp と同じように便利です。しかし、ほとんどの UIはしばしば垂直方向にスクロールするため、この修飾子は必要ありません。 UIは縦方向にスクロールすることが多いため、高さを柔軟に変更することができます。 幅がより厳密であるのに対し、UI はしばしば垂直方向にスクロールするため、高さが利用可能かどうかについてより柔軟であることを考慮すると、ほとんどのアプリはこの修飾子を必要としません。

これらの修飾子を使用することは、画面サイズ グループを使用するよりも複雑に見えるかもしれません。 を使用するよりも複雑に見えるかもしれませんが、UI の要件を決定すれば、実際にはもっと単純になります。 UI の要件が決まれば、実際にはもっと簡単です。UI を設計するとき、主に気になるのは、アプリケーションの実際のサイズでしょう。 アプリケーションを設計する際に気になるのは、携帯電話スタイルのUIを切り替える実際のサイズでしょう。 携帯電話スタイルのUIと、複数のペインを使用するタブレットスタイルのUIが切り替わる実際のサイズです。 を切り替えるサイズです。この切り替えの正確なポイントは、特定のデザインに依存します。 タブレットのレイアウトには720dpの幅が必要かもしれません。 タブレットのレイアウトには720dpの幅が必要かもしれませんし、600dpで十分かもしれませんし、480dpかもしれませんし、これらの間のいくつかの数値かもしれません。表2の 表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つのレイアウトを提供することができます。 これらの2つのレイアウトを提供することができます。

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

この場合、タブレット用レイアウトを利用するためには、利用可能なスクリーンスペースの最小の幅が 600dp でなければなりません。

7 インチと 10 インチのタブレットのサイズを区別するために UI をさらにカスタマイズしたい場合は 7 インチと 10 インチのタブレットのようなサイズを区別するために UI をさらにカスタマイズしたい場合、次のように追加の最小幅のレイアウトを定義することができます。 最小幅のレイアウトを追加で定義することができます。

res/layout/main_activity.xml # 携帯電話用 (利用可能な幅が 600dp より小さい) 携帯電話用 (利用可能な幅が 600dp 未満) res/layout-sw600dp/main_activity.xml # 7" タブレット用 (幅が 600dp 以上) タブレット用 (幅 600dp 以上) res/layout-sw720dp/main_activity.xml

10" タブレット向け (720dp ワイド以上)

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

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

res/layout/main_activity.xml # 端末の場合 (利用可能な幅が 600dp より小さい端末用) res/layout-w600dp/main_activity.xml # マルチペイン(600dp 以上の画面) マルチペイン(利用可能な幅が600dp以上のあらゆる画面)の場合

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

利用可能な高さが気になる場合は、hdp修飾子を使用して同じことを行うことができます。 hdp 修飾子を使用します。あるいは、wdp と hdp を組み合わせてもかまいません。 を組み合わせることもできます。