2014-02-07 83 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

注意找到自己的最佳规模

  • 组算出的尺寸:我并没有实现这个方法,只是想到了它。

    尽量不要在每次更新时进行此操作,缓存结果(即使在首选项中),小部件选项也不应经常更改。