6

我的目标是 1.6,但如果用户在 3.0 以上的设备上,我希望有一个可以使用 stackview 和 Android SDK 为小部件提供的其他改进的漂亮小部件。和 1.6-2.3/ 上的普通小部件

我应该怎么做这两个版本的小部件?

非常感谢

4

3 回答 3

13

我的建议:

创建两个版本的应用小部件并使用资源值方法启用/禁用。

在 res/values/bools.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="atLeastHoneycomb">false</bool>
    <bool name="notHoneycomb">true</bool>
</resources>

在 res/values-v11/bools.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="atLeastHoneycomb">true</bool>
    <bool name="notHoneycomb">false</bool>
</resources>

在 AndroidManifest.xml 中:

<receiver android:name="MyOldAppWidgetProvider"
          android:enabled="@bool/notHoneycomb">

    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/example_oldappwidget_info" />
</receiver>

<receiver android:name="MyNewAppWidgetProvider"
          android:enabled="@bool/atLeastHoneycomb">

    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/example_newappwidget_info" />
</receiver>
于 2012-05-02T18:07:21.553 回答
7

您可以res通过添加后缀(如-v11.

例如,假设您的布局名为main.xml. 您可以将 1.6 - 2.3main.xml文件放在layout文件夹中,然后将main.xml包含新小部件的新花哨文件放入文件layout-v11夹中。使用 Honeycomb 及更高版本时,-v11当您引用文件时,将选择文件夹中的布局,例如R.layout.main.

从那里,您可以在活动中使用一些逻辑来检查新的小部件对象是否存在(或仅检查Build.VERSION类)并相应地进行分支。

有关这方面的更多详细信息,请查看 Android 文档中的限定符名称规则

于 2012-05-02T18:03:03.653 回答
2

您可以检查设备 api 版本,例如:

int apiLevel = android.os.Build.VERSION.SDK_INT;

从 apiLevel ,您可以使用 if-else 为不同的 api/ 加载不同的布局/视图

于 2012-05-02T18:02:25.700 回答