如何根据sdk版本在Android中启用/禁用App Widgets?

Gal*_*lal 4 android android-widget

我需要实现一个使用Stackview的小部件,它支持sdk 11及更高版本.我的应用程序使用sdk 8,所以我可以根据sdk版本启用/禁用小部件吗?

Com*_*are 11

如果应用程序窗口小部件完全不可用,请<receiver>在清单(android:enabled="false")中将其标记为已禁用.然后,在您的应用首次运行时,检查您的版本并通过PackageManager和有条件地启用应用小部件setComponentEnabledSetting().唯一的缺点是,您的应用小部件在第一次启动您的应用之前不会显示为可用.

如果app小部件只是在不同版本上具有不同的行为,则res/layout-v11/用于StackView实现和res/layout/StackView实现.您AppWidgetProvider可以检查API级别并相应地配置RemoteViews相关内容.

  • 你可以通过带有bool xml资源的xml完全处理这个问题.设置`android:enabled ="@ bool/stackViewAllowed"`.用`<bool name ="stackViewAllowed"> false </ bool>`创建一个xml资源`/ values/bools.xml`,用`<bool name ="stackViewAllowed"创建一个资源`/ values-v11/bools.xml` > true </ bool>`然后它将启用蜂窝(11)以及之前和之前禁用. (6认同)
  • @littleFluffyKitty:非常好,但我认为你的方法只处理我的第一段而不是第二段.我只是提到那个会遇到这个答案的人以及将来的评论.谢谢你加入这个! (2认同)

Ram*_*amz 5

在res \ values文件夹中创建xml bools.xml并添加以下行

res \ values

<?xml version="1.0" encoding="utf-8"?> 
<resources>
<bool name="widgetenable">false</bool> 
</resources> 
Run Code Online (Sandbox Code Playgroud)

和以同样的方式在values-v11文件夹中添加bool.xml一样,只需替换widgetenable即可

res \ values-v11

 <?xml version="1.0" encoding="utf-8"?> 
<resources>
<bool name="widgetenable">true</bool> 
</resources>
Run Code Online (Sandbox Code Playgroud)

然后在您的manisfest.xml中的小部件recever标签上添加此行

android:enabled="@bool/widgetenable"
Run Code Online (Sandbox Code Playgroud)

这将基于sdk启用或禁用小部件。