9

Android AppWidget で実行時に画面密度を決定する必要があります。HDPI エミュレーター デバイス (avd) をセットアップしました。通常の実行可能プロジェクトをセットアップし、次のコードを onCreate メソッドに挿入する場合:

DisplayMetrics dm = getResources().getDisplayMetrics();
Log.d("MyTag", "screen density " + dm.densityDpi);

これにより、期待どおり「画面密度240」が出力されます。

ただし、AppWidget プロジェクトをセットアップし、このコードを onUpdate メソッドに挿入すると、次のようになります。

DisplayMetrics dm = context.getResources().getDisplayMetrics();
Log.d("MyTag", "screen density " + dm.densityDpi);

これにより、「画面密度160」が出力されます。デバッガーを接続しているときに、ここの Resources オブジェクトの mDefaultDisplay メンバーが AppWidget の場合は null であることに気付きました。

同様に、実行時に AppWidget の context.getResources() から取得した Resources オブジェクトを使用してリソースを取得すると、画面密度に基づいて間違ったリソースが返されます。たとえば、mdpi には 60x60px のドローアブルがあり、hdpi には 80x80 のドローアブルがあります。context.getResources().getDrawable(...) を使用してこの Drawable オブジェクトを取得すると、60x60 バージョンが返されます。

AppWidget のコンテキストから実行時にリソースを正しく処理する方法はありますか?

ありがとう!

4

1 に答える 1

1

これはバグのように感じます。エラーを示すサンプル プロジェクトを作成できる場合は、Android イシュー トラッカーにイシューを投稿してください。考えている場合は、ここに問題を指摘するコメントを追加してください。

于 2010-04-15T11:43:47.980 に答える