2

ホーム画面ウィジェットのテキストのフォント サイズを変更できるアプリケーションがあります。一例はhttps://play.google.com/store/apps/details?id=org.zooper.zwfree

ただし、ホーム画面のウィジェットは のみを運ぶことができるため、動的にRemoteViewを設定しても機能しません。textSizeTextView

私が見ているように、テキストサイズを動的に変更するには2つの可能性があります:

  • テキスト サイズごとに別の layout.xml ファイルを追加します。TextViewこれらのファイルは、のtextSize値が異なるだけです。ユーザーがテキストサイズを変更したい場合、それぞれのレイアウトをロードする必要があります。

  • ここのようにビューを作成する代わりにビットマップを描画しますhttps://stackoverflow.com/a/4411060/883083

私の質問は次のとおりです。第 3 の可能性は残っていますか?

4

1 に答える 1

2

API レベル 16 以上をターゲットにしている場合は、次のことを試すことができます。

悲しいことに、すべては API 16+ でのみ可能であるウィジェットのサイズを知ることに依存しています。

  1. AppWidgetProvider.onAppWidgetOptionsChangedコールバックをオーバーライドするか、後でAppWidgetManager.getAppWidgetOptions
    を介して同じバン​​ドルを取得します
  2. ウィジェットのサイズを抽出します。
    • 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)
  3. TextViewウィジェットのサイズから の幅を推測します
    (ウィジェットのルートにある場合はmatch_parent、余白/パディングに注意してください)。
  4. 複雑なレイアウトがある場合は、代わりに次のことができます
    • アプリ空間でウィジェット全体を膨らませる
      widget = LayoutInflater.from(context).inflate(R.layout.widget, null)
    • フレームワーク:に基づいてレイアウトをシミュレートします
      widget.measure(MeasureSpec.makeMeasureSpec(widgetWidth, MeasureSpec.EXACTLY), ...)
    • TextViewのサイズを取得します。widget.findViewById(R.id.myText).getMeasuredWidth()
  5. refitTextこちらのようなものを使用して、最適なサイズを見つけてください
  6. RemoteViews.setTextViewTextSizeを介して計算されたサイズを設定します

注: このメソッドは実装していません。考えただけです。

更新のたびにこれを行うのではなく、結果を (設定でも) キャッシュしてください。ウィジェットのオプションは頻繁に変更しないでください。

于 2014-10-15T12:28:29.763 に答える