如何为Android 1.6和3.0+提供不同的小部件?

6
我的目标是针对1.6版本,但是如果用户使用3.0以上设备,我想有一个可以使用堆栈视图和其他Android SDK改进的漂亮小部件。而在1.6-2.3版本上则需要一个简单的小部件。
如何创建这两个版本的小部件呢?
非常感谢。
3个回答

14

我的建议:

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

在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>

太棒了!明智的解决方案! - hector6872

7
您可以在res目录中添加后缀,例如-v11,以使子文件夹与API级别相关联。
例如,假设您的布局文件名为main.xml。您可以将1.6-2.3版本的main.xml文件放在layout文件夹中,然后将包含新小部件的新main.xml文件放在layout-v11文件夹中。使用Honeycomb及更高版本时,将选择-v11文件夹中的布局文件,当您像R.layout.main这样引用文件时。
从那里开始,在您的活动中可以有一些逻辑来检查您的新小部件对象的存在(或仅检查Build.VERSION类),并相应地进行分支。
有关详细信息,请参阅Android文档中的限定符名称规则

2
您可以像这样检查设备 API 版本:

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

根据返回的 apiLevel,您可以使用 if-else 为不同的 API 加载不同的布局/视图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接