私のアプリがテキストが多いとは言いませんが、ランダムな文字列が表示されることがありますが、他のものよりも長いことがあります。私のドロイド 2 にはうまくフィットしますが、小さいドロイドでは同じように表示されないことはわかっています。すべてのアンドロイドで確実に機能するように、さまざまなサイズのテキストをフォーマットする適切な方法を知っている人はいますか?
3 に答える
テキストを大きくしたり小さくしたりするだけの場合は、Androidが提供するデフォルトのスタイルを使用することをお勧めします。
<TextView ... android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView ... android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView ... android:textAppearance="?android:attr/textAppearanceSmall" />
どちらもデフォルトではありません。デフォルトは次のとおりです。
<TextView ... android:textAppearance="?android:attr/textAppearance" />
TextViewだけでなく、他のビューにも確実に適用できます。
Google では、テキスト サイズの寸法に sp を使用することを推奨しています。使用するレイアウトは機能する必要があるため、レイアウトがスケーリングされたときに、可能な限りすべてのサイズで機能します (さまざまなサイズの画面用のレイアウトが必要になる場合があります)。テキストが収まらない場合は、折り返すか、省略してください
SP と DP は期待どおりに機能していないようです。DP は「表示に依存しない」と想定されており、SP は同じように記述されています。ただし、スケーリングすることはできます (おそらく「ズーム」コマンドによって)。ただし、期待どおりに動作しません。
たとえば、320x480 のスマートフォンと Nexus の 2 つのデバイスがあります。これは800x1280ですが、それ自体をsw600と表現しています(理由はわかりません)。何が起こっているのかを確認するために、ビューに textview を追加しました。これは 60 個の「X」文字で構成されています (等幅と同じようにカーニングされているように見えるため選択されました)。
textView の textSize は 10 dp に設定され、そのうちの 60 個が Nexus の画面全体に表示されます。ただし、電話ではまったく同じサイズに表示され、ほぼ 2 本の線を形成します。
したがって、DP は表示に依存しないようです。ただし、各文字に与えられる最大の (おおよその) ピクセル数を説明するだけです。SP でディメンションを定義しても違いはありません。
これはあまり役に立ちません。何らかの形式のスケーリングが適用されることを期待していたので、携帯電話で適切なサイズを選択でき、Nexus 用にスケーリングされます。
たとえば、テキスト行の長さが約 30 文字で、画面全体に 1 行を埋めるようにするには、10 dp と定義します。各 dp は 1 ピクセルになります (大まかに)。次に、Nexus で描画すると、各 dp は 2 ピクセルになり、2 倍のサイズで表示されます。
私が知る限り、これはどのように機能するかではありません。それはそれをかなり役に立たなくします。
私の唯一の解決策は、それはエレガントなものではありませんが、dimens.xml ファイルの寸法のみを使用し、そのうちの 6 つを一般的な幅 (240,320,480,600,720,800 - それ以上のものは自分で整理できます) ごとに 1 つずつ使用することです。 Nexus に収まるようにコードを作成し、作成したスプレッドシートを使用して、一般的な幅の dimens.xml の値をスケーリングします。それは苦痛です。しかし、それは機能します。
間違った使い方をしていない限り、Android システムが壊れているだけです。