有些应用程序可以更改主屏幕小部件中文本的字体大小。一个例子是https://play.google.com/store/apps/details?id=org.zooper.zwfree
但是,主屏幕小部件只能带有RemoteView
个,因此动态设置textSize
的TextView
将不起作用。
我认为有两种方法可以动态更改文本大小:
为每个文本大小添加另一个layout.xml文件。这些文件仅在TextView
的{{1}}值不同。当用户想要更改文本大小时,必须加载相应的布局。
绘制位图而不是像https://stackoverflow.com/a/4411060/883083那样创建视图
我的问题是:还有第三种可能性吗?
答案 0 :(得分:2)
如果您的目标是API级别16或更高级别,则可以尝试以下操作:
可悲的是,整个过程取决于知道小部件的大小,这只能在API 16 +中使用。
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
here的内容来查找最佳尺寸注意:我没有实现这个方法,只是考虑过它。
尽量不要在每次更新时执行此操作,缓存结果(即使在首选项中),窗口小部件选项也不应经常更改。