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

但是主屏幕小部件只能携带RemoteViews,因此设置textSizeTextView 动态 将不起作用。

在我看来,动态更改文本大小有两种可能性:

为每个文本大小添加另一个 layout.xml 文件。这些文件只是在TextViewtextSize 值上有所不同。当用户想要更改文本大小时,必须加载相应的布局。

绘制一个位图而不是像这里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 主屏幕小部件启动活动

Android主屏幕小部件中的RecyclerView [重复]

让Android主屏幕小部件在textviews之间交替的最佳方式是啥?

Android 主屏幕小部件动画

Android 无法使用列表视图加载主屏幕小部件

从原生 Android 主屏幕小部件调用 Flutter (Dart) 代码