gpt4 book ai didi

Android 主屏幕小部件 textsize 动态

转载 作者:行者123 更新时间:2023-11-29 00:23:12 28 4
gpt4 key购买 nike

有些应用程序可以更改主屏幕小部件中文本的字体大小。一个例子是 https://play.google.com/store/apps/details?id=org.zooper.zwfree

但是主屏幕小部件只能携带 RemoteView,因此设置 TextViewtextSize 动态 不会工作。

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

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

  • 绘制位图而不是像此处那样创建 View https://stackoverflow.com/a/4411060/883083

我的问题是:还有第三种可能吗?

最佳答案

如果您的目标是 API 级别 16 或更高级别,您可以尝试以下操作:

遗憾的是,整个事情取决于了解小部件的大小,这只有在 API 16+ 中才有可能。

  1. 覆盖AppWidgetProvider.onAppWidgetOptionsChanged回调
    或稍后通过 AppWidgetManager.getAppWidgetOptions 获得相同的 bundle
  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 这样的东西找到您的最佳尺寸
  6. 通过 RemoteViews.setTextViewTextSize 设置计算大小

注:这个方法我没有实现,只是想了想。

尽量不要在每次更新时都这样做,缓存结果(即使在首选项中),小部件选项不应经常更改。

关于Android 主屏幕小部件 textsize 动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21638947/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com