2014-02-07 84 views
1

有些應用程序提供了更改主屏幕小部件中文本字體大小的功能。一個例子是https://play.google.com/store/apps/details?id=org.zooper.zwfreeAndroid主屏幕小部件動態文本大小

不過主屏幕小部件只能攜帶RemoteView這麼設置的TextView動態將無法​​正常工作的textSize

在我看來,有兩種可能性來動態改變文字大小:

  • 添加每個文本大小的另一個layout.xml文件。這些文件僅在TextViewtextSize值中有所不同。當用戶想要改變文本大小時,必須加載相應的佈局。

  • 繪製位圖,而不是創造一個像這裏查看https://stackoverflow.com/a/4411060/883083

我的問題是:有沒有第三種可能性剩下什麼?

+0

這可能是一個解決辦法: http://stackoverflow.com/questions/6721616/how-can-i-to-change-text-size-in-remoteviews – radley

回答

1

如果你的目標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)
    • 模擬基於the framework佈局:
      widget.measure(MeasureSpec.makeMeasureSpec(widgetWidth, MeasureSpec.EXACTLY), ...)
    • 讓您TextView的大小:widget.findViewById(R.id.myText).getMeasuredWidth()
  5. 使用類似refitText here通過RemoteViews.setTextViewTextSize

注意找到自己的最佳規模

  • 組算出的尺寸:我並沒有實現這個方法,只是想到了它。

    儘量不要在每次更新時進行此操作,緩存結果(即使在首選項中),小部件選項也不應經常更改。