如何让Widget知道textcale中的变化?

时间:2013-04-29 21:28:03

标签: android android-intent configuration android-widget android-service

关于设备方向变化的SO有很多问题 - 对Widget来说可能有意义也可能没有意义。我想收到有关textScale的配置更改的通知。 (我正在做一些计算,哪种字体大小应该最好使用,并稍微重新排列布局,使其在小部件中看起来很漂亮)。

话虽如此,我想知道最好的方法是什么。到目前为止,我发现:

  • 有一个Intent,AppWidgetProvider无法接收(“你不能通过清单中声明的​​组件来接收它,只能通过使用Context.registerReceiver()显式注册它。”)

  • android:configChanges="fontScale"列入清单,这是针对某个活动,而不是针对接收者(适用于窗口小部件......)

  • 然后有一个RemoteViewsService有一个方法onConfigurationChanged(...),但我还不明白,我将如何利用它。

还有更多选择吗?我是否需要使用RemoteViewsService?谢谢你的提示!

1 个答案:

答案 0 :(得分:1)

这些都不起作用:

  • 您无法注册Android可能会在几毫秒内处理掉的组件。所以你不能注册AppWidgetProvider,因为它不会留在内存中。但是,您可以通过另一个组件注册BroadcastReceiver,因为这样的已注册BroadcastReceiver的生命周期与注册它的对象相关联(请参阅下面的更多说明)。
  • 正如您所指出的,configChanges标记仅适用于Activity。
  • 使用可能或可能不适用于您的案例的集合视图(列表,网格...)时使用RemoteViewsService?在任何情况下,它只能从API 11上获得,因此它不适用于Gingerbread设备。

选项1确实有用:https://stackoverflow.com/a/2435879/534471。 问题是注册的BroadcastReceiver与注册它的对象绑定。大多数Android组件(ContentProvider,Activity,Service)都不会永远存在,但Android迟早会被销毁。你最好的选择是START_STICKY的服务,但是当CommonsWare在他的回答中正确地指出它是一个混乱且无效的解决方案(并且不是100%可靠)。

AFAIK对您的问题没有可靠的解决方案。