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

che*_*ang 6 android android-widget android-3.0-honeycomb

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

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

非常感谢

dag*_*pin 13

我的建议:

创建应用程序窗口小部件的两个版本,并使用资源值方法启用/禁用.

在res/values/bools.xml中:

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

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

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

在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>
Run Code Online (Sandbox Code Playgroud)


wsa*_*lle 7

您可以res通过添加后缀来在目录API级别中创建子文件夹-v11.

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

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

有关此问题的更多详细信息,请查看Android文档中的限定符名称规则.