Android 主屏幕小部件 textsize 动态
Posted
技术标签:
【中文标题】Android 主屏幕小部件 textsize 动态【英文标题】:Android home screen widget textsize dynamically 【发布时间】:2014-03-05 12:37:18 【问题描述】:有些应用程序可以更改主屏幕小部件中文本的字体大小。一个例子是https://play.google.com/store/apps/details?id=org.zooper.zwfree
但是主屏幕小部件只能携带RemoteView
s,因此设置textSize
的TextView
动态 将不起作用。
在我看来,动态更改文本大小有两种可能性:
为每个文本大小添加另一个 layout.xml 文件。这些文件只是在TextView
的textSize
值上有所不同。当用户想要更改文本大小时,必须加载相应的布局。
绘制一个位图而不是像这里https://***.com/a/4411060/883083创建一个视图@
我的问题是:还有第三种可能吗?
【问题讨论】:
这可能是一个解决方案:***.com/questions/6721616/… 【参考方案1】:如果您的目标是 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)
基于the framework:widget.measure(MeasureSpec.makeMeasureSpec(widgetWidth, MeasureSpec.EXACTLY), ...)
模拟布局。
获取您的TextView
的大小:widget.findViewById(R.id.myText).getMeasuredWidth()
使用refitText
here 之类的内容来找到您的最佳尺寸
通过RemoteViews.setTextViewTextSize设置计算大小
注意:这个方法我没有实现,只是想了一下。
尽量不要在每次更新时都这样做,缓存结果(即使在首选项中),小部件选项不应经常更改。
【讨论】:
以上是关于Android 主屏幕小部件 textsize 动态的主要内容,如果未能解决你的问题,请参考以下文章
Android主屏幕小部件中的RecyclerView [重复]