設計中のホーム画面ウィジェットのサイズを取得する際に問題が発生しています。私はSDKのドキュメントを読んで少し検索しましたが、実際には何も役に立ちません。とにかく、ウィジェット プロバイダーの onAppWidgetOptionsChanged メソッドを使用して API 16 を超えるデバイスのウィジェット サイズを取得していますが、一部のデバイスでは正しく報告されません。Nexus S と Transformer Prime では正しく機能しますが、私の S3 で得られる値は、スクリーンショットから測定した値よりも小さくなっています。ピクセルではなく dp で報告されているという事実を説明しました。Samsung のランチャーによって何らかのマージンが追加されているのではないかと推測していますが、相関関係は見つかりません。たとえば、2x2 ウィジェットを使用すると、onAppWidgetOptionsChanged は幅 154 dp (~293 ピクセル)、高さ 193 dp (~355 ピクセル) を報告します。しかし、私は Photoshop で ~340px x 420px を測定しました。これは Samsung だけの問題ですか、それとも多くの非バニラ プラットフォームでこの問題に直面するのでしょうか。コードはかなり基本的なものですが、念のため投稿しています。
@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
int minWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int maxWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
int minHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
int maxHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
Log.i("WidgetProvider","Widget size changed");
Log.i("WidgetProvider","minWidth: " + minWidth);
Log.i("WidgetProvider","minHeight: " + minHeight);
Log.i("WidgetProvider","maxWidth: " + maxWidth);
Log.i("WidgetProvider","maxHeight: " + maxHeight);
}
報告されたサイズを使用して、ウィジェット更新サービスでビットマップを生成しています。ウィジェットにカスタム フォントと背景を使用したいので、カスタム ビットマップを使用する必要があります。API 16 未満のデバイスでは、ビットマップをウィジェット情報 xml で定義された minWidth と minHeight に設定しました。一部のデバイスでは、これにより、ウィジェットの周りに私が好むよりも多くのパディングが残りますが、画像は歪んでいません. 私が理解しているように、以前のデバイスではウィジェットのサイズを取得する方法はありません。また、アプリ ウィジェットの TextView でカスタム フォントを使用できるとは思えません。これは正しいです?画像で fitXY を使用してみましたが、一部のデバイスではひどく見えます。ウィジェットでカスタム背景とカスタム フォントを実現するより予測可能な方法はありますか? アドバイスをいただければ幸いです。ありがとう!