0

Android のレイアウトと画面サイズに関する多くの質問を読みました。私はここでAndroidのページを参照しました http://developer.android.com/guide/practices/screens_support.html#screen-independence

問題は、私が行方不明になっている間にあるように見えることです

私のアプリは、Gingerbread から Jelly bean デバイスまでをサポートしています。このように構成しています。

layout (for Gingerbread devices)
layout-sw320dp (for ICS/JB devies)
layout-sw600dp (for 7" tab's)
layout-sw720dp (for 10" tab's)

これらのフォルダーにすべてのレイアウト xml があり、Eclipse でグラフィカル レイアウトを使用し、デバイスごとに変更することで、デバイスのサイズに合わせて調整しました。私はすべてが大丈夫だと思った。

しかし、いくつかの重要なデバイスが欠けているようです。

例えば。私のRazrでは、Eclipseのグラフィカルレイアウトに示されているようなサイズではありません。Razr は 540x960 240dpi のデバイスで、式を使用して dp (dp = (px / dpi) * 160) を取得すると、360dp になりますよね?

つまり、sw320dp のレイアウト ファイルを使用する必要がありますね。何らかの理由で、収まらないいくつかのアイコンのサイズを変更してカットします。

次に、別の例として、HTC Thunderbolt を使用しているユーザーが、アプリをロードすることさえできないと言っています。Thunderbolt は 480x800 で 217dpi なら 353dp になりますよね? したがって、同じ sw320dp フォルダーからリソースをプルする必要があります。Thunderbolt からのスタック トレースは、このエラーを明らかにします

Caused by: java.lang.reflect.InvocationTargetException
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f01006a a=-1}

そのリソースは public static final int background_gb=0x7f01006a; です。

これは、layout-sw320dp ではなく、layout フォルダーからレイアウトをプルするために発生しています。ヒープエラーが発生し続けたため、レイアウトフォルダーのレイアウトを画像ではなく色で背景を塗りつぶすように設定しています。nexus oneエミュレーターでテストすると、正常に動作します。

それで、私はこれを正しくしていないのではないかと考えるようになりました。他の開発者の apk を見ても、layout-sw320dp フォルダーが表示されません。しかし、それは私が最初に必要としたことをしているように見えました。それを省略した場合、私のレイアウト フォルダは 480x800 デバイスから S4 の 1080x1920 デバイスまでのレイアウトを制御します。1 つのレイアウト xml で非常に多くのデバイスをカバーする方法がわかりません。

私へのアドバイスはありますか?

電話のレイアウト フォルダ内のすべてをカバーする問題の例

ネクサスワン ここに画像の説明を入力

ネクサス4 ここに画像の説明を入力

銀河S4 ここに画像の説明を入力

4

1 に答える 1

0

Razr は 540x960 240dpi のデバイスで、式を使用して dp (dp = (px / dpi) * 160) を取得すると、360dp になりますよね?

はい、最小幅の場合は 360 dp です。

何らかの理由で、収まらないいくつかのアイコンのサイズを変更してカットします。

あなたのレイアウトにはバグがあります。

これは、layout-sw320dp ではなく、layout フォルダーからレイアウトをプルするために発生しています。ヒープエラーが発生し続けたため、レイアウトフォルダーのレイアウトを画像ではなく色で背景を塗りつぶすように設定しています。

次に、色リソースにバグがあり、すべてではなく一部のシナリオの定義を提供しました。

しかし、それは私が最初に必要としたことをしているように見えました。

あなたがどのようにしてその決断に至ったのか、私にはわかりません。

それを省略した場合、私のレイアウト フォルダは 480x800 デバイスから S4 の 1080x1920 デバイスまでのレイアウトを制御します。

正しい。

1 つのレイアウト xml で非常に多くのデバイスをカバーする方法がわかりません。

それらはすべて同様の画面サイズを共有しているため、通常は問題はありません。RAZR の画面は ~4 インチです。HTC Thunderbolt の画面は ~4 インチです。Galaxy S4 には ~4 インチの画面があります。通常、基本的な画面サイズはすべて同じであるため、通常は同じレイアウトにする必要があります。密度に依存しない測定単位を使用している限り、作成する限りこれは、複数のブラウザー ウィンドウ サイズをサポートできる Web アプリを作成することと実質的に違いはありません。

私は値-hdpiと値-xhdpiでdimens.xmlを参照するマージン/テキスト/などのサイズのための私のレイアウトフォルダを持っています。それが私の最良の選択肢だと思いますか?

密度に依存しない測定単位 (つまり、 以外のものpx) を使用してください。通常、密度に依存するバージョンの は必要ありませんdimens.xml。実際、通常、dimens.xmlバージョンはどちらかといえばレイアウト バージョンと一致します (たとえば、values-sw600dpのレイアウトで余白を少し大きくする必要があると判断したため、バージョンがある場合がありますlayouts-sw600dp)。

背景に画像を使用するGBデバイスにはまだ問題があります。彼らは色を使わなければなりません。それらを分離する方法がわからない

すべてのデバイスで背景に色を使用します。または、「ヒープ エラー」を修正します。通常、ヒープ サイズは OS のバージョンによって直接変化するのではなく、画面サイズによって変化するため、問題はおそらく OS のバージョンに関係していません。

于 2013-07-08T13:40:05.727 に答える