API レベル 16 以上をターゲットにしている場合は、次のことを試すことができます。
悲しいことに、すべては API 16+ でのみ可能であるウィジェットのサイズを知ることに依存しています。
- AppWidgetProvider.onAppWidgetOptionsChangedコールバックをオーバーライドするか、後でAppWidgetManager.getAppWidgetOptions
を介して同じバンドルを取得します
- ウィジェットのサイズを抽出します。
options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)
options.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)
options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)
options.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)
TextView
ウィジェットのサイズから の幅を推測します
(ウィジェットのルートにある場合はmatch_parent
、余白/パディングに注意してください)。
- 複雑なレイアウトがある場合は、代わりに次のことができます
- アプリ空間でウィジェット全体を膨らませる
widget = LayoutInflater.from(context).inflate(R.layout.widget, null)
- フレームワーク:に基づいてレイアウトをシミュレートします
widget.measure(MeasureSpec.makeMeasureSpec(widgetWidth, MeasureSpec.EXACTLY), ...)
。
TextView
のサイズを取得します。widget.findViewById(R.id.myText).getMeasuredWidth()
refitText
こちらのようなものを使用して、最適なサイズを見つけてください
- RemoteViews.setTextViewTextSizeを介して計算されたサイズを設定します
注: このメソッドは実装していません。考えただけです。
更新のたびにこれを行うのではなく、結果を (設定でも) キャッシュしてください。ウィジェットのオプションは頻繁に変更しないでください。