0

画像付きのアプリを作成し、Android Icon Setウィザードで追加しました。ウィザードは、イメージの 3 つのバージョン (mdpi、hdpi、xhdpi) を作成しました。

Google Play でアプリを公開しましたが、ldpi 画面を使用しているユーザーからクラッシュ レポートを受け取りました。例外はCaused by: android.content.res.Resources$NotFoundException: File from drawable resource ID #0x7f02007f. ドローアブルは mdpi、hdpi、xhdpi に存在し、アプリは残りのユーザーに対して機能しました。

したがって、ldpi バージョンに drawable が存在しないという問題があったと思います。

私の質問は次のとおりです:
1) クラッシュする代わりに mdpi ドローアブルを自動スケーリングするようにアプリに指示する方法はありますか?
2) ldpi 画面をサポートするには、画像を ldpi サイズに編集する必要がありますか?

ありがとう。

4

2 に答える 2

1

これは、さまざまな密度管理の一般的なエラーであるため、これらが質問に対する回答です。

1.-いいえ、アセットの保存方法ではありますが、はい、「アセットが現在の密度の下位階層にある場合のみ」たとえば、ドローアブル(デフォルトの非特定密度)とドローアブル-ldpiにアセットがある場合AND中密度デバイスでアプリを実行すると、OS はイメージのサイズを -ldpi から密度に変更しようとします (イメージで dps を使用している場合はメモリが消費されます)。OS がアセットを処理する方法は次のとおりです。

あなたが持っているとしましょう:

res-
    -drawable
        -icon.png
    -drawable-ldpi
        -icon.png
    -drawable-mdpi
       -icon.png

高密度デバイスでアプリを実行している場合、OS は最初に drawable-hdpi でアセットを見つけようとしますが、アセットが存在しないため、見つかるまで階層を下っていきます。この場合はdrawable-hdpi では見つけられませんが、drawable-mdpi で見つけられ、それを使用して入力されます。すべて問題ありませんが、アセットの密度の違いがメモリにかかります。

OSがアセットフォルダー階層を下って最後まで進み、たとえば何も見つからない場合、正確なエラーが発生します。

あなたが持っているとしましょう:

res-
    -drawable-hdpi
        -icon.png

このアプリを HIGH Desnity Device で実行すると、最初の試行でアセットが検出され、階層を下ることがないため、完全に実行されます。Extra High Density Device の場合も同様です。階層を下って drawable-hdpi に移動すると、次のステップでそれが見つかり、問題なく動作しますが、MEDIUM Density の場合、そこにないため、最初に drawable-mdpi で見つけようとします。 drawable-ldpi でそれを見つけるのも運が悪いので、「デフォルト (drawable)」に移動します。これは、OS がアセットが見つからないか、BOOOMリソースが見つかりません。例外があります。このメカニズムは、Androidのほぼすべてのリソースに適用されます

2.-はい、見栄えを良くするために、アセットをldpiで作成し、drawable-ldpiまたはdrawable(デフォルト-密度なし)に保存する必要があります。

この情報はすべて本から抜粋したものです。まだ疑問がある場合は、Eclipse で空の Android プロジェクトを作成し、SDK が特定のサイズで各密度に 1 つの icon_launcher.png img を作成して、この問題を正確に処理する方法に注目してください。私の経験上の推奨事項として、常にすべての密度を処理することが有用であることがわかりましたが、すべてのアセットをデフォルト フォルダーに平均的な密度/品質で保持して、実行中に 1 つの密度を忘れた場合に備えて、この正確な問題を回避することがより重要です。開発は、クラッシュよりもぼやけたアセットの方が適しています。

お役に立てれば。

よろしく!

于 2013-10-19T15:34:16.680 に答える
-1

クラッシュする代わりに mdpi ドローアブルを自動スケーリングするようにアプリに指示する方法はありますか?

これは、ファームウェアの製造元 (デバイスの製造元または ROM modder) がそれを台無しにしない限り、自動的に発生します。

ldpi 画面をサポートするには、画像を ldpi サイズに編集する必要がありますか?

いいえ。

私はあなたのプロダクションコードベース7f02007fR.java関連するものを調べて、それがあなたが考えているものであることを確認します. これらの数値はコンパイルごとに再生成されることに注意してください。R.javaおそらくこれは、実際のリソースのパッケージ化と同期していなかったため、この数の描画可能なリソースがどの密度でも存在しない場合です。この問題を回避するには、本番 APK の作成の一環として、クリーン ビルド ([プロジェクト] > [Eclipse 内のクリーン] など) を実行します。

于 2013-10-19T13:45:30.843 に答える