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

时间:2012-05-02 17:56:02

标签: android android-widget android-3.0-honeycomb

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

上的普通小部件

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

非常感谢

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:7)

您可以通过添加res之类的后缀来使-v11目录API级别中的子文件夹具体。

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

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

有关详细信息,请查看Android文档中的Qualifier name rules

答案 2 :(得分:2)

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

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

从apiLevel

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