2012-03-13 90 views
14

我爲Android的前Honecomb版本創建了三個具有不同大小的應用程序小部件,併爲Honeycomb及更高版本創建了一個可調整大小的可滾動列表視圖小部件。根據API級別隱藏應用程序小部件

由於這些小部件提供了相同的功能,並且針對Honeycomb並且稍後可調整大小,因此我希望在API級別12或更高版本中刪除其他版本的小部件。這可能以某種方式嗎?

據我可以告訴,似乎沒有任何方法可以禁用一個小部件獲得AppWidgetService註冊,如果它可以找到AppWidgetProviderInfo資源文件。因此,似乎我只能在更高版本中包含小部件,但不排除定位到以早期API版本爲目標的xml文件夾中定義的版本。

回答

9

如果它是一個單一的應用程序的小工具,有預HC或HC的實現,你可以將它們組合成一個AppWidgetProvider和使用res/xml-v11/res/xml/有不同的元數據。

我能想到的來處理您的情況,唯一的方法,雖然是爲紀念某些AppWidgetProviders的在清單(android:enabled="false")禁用,然後啓用以及基於android.os.Build.VERSION您的應用程序第一次運行禁用提供商使用PackageManagersetComponentEnabledSetting(),給你正確的設置。由於在Android 3.1+上,用戶將需要啓動您的一項活動才能添加應用窗口小部件,無論如何,您至少擁有應用此邏輯的入口點。

+0

謝謝。這個解決方案效果很好。如果你可以在'appwidget-provider'中使用'android:enabled'屬性,它會更好,但是這將不得不做.. :) – davidk 2012-03-13 13:15:52

+0

@CommonsWare你可以給一些簡單的想法。 – Harshid 2013-03-11 13:29:18

+1

爲什麼不製作一個帶有布爾值的'xml'文件呢?在'res/values-v11 /'(或者應該排除的任何一個)中,將布爾值設置爲false,並在你的'AndroidManifest'中,引用'android:enabled =「@ bool/enable_listview_appwidget」'的布爾值? – xbakesx 2013-04-30 17:27:07

19

OP已經得到了他的解決方案,但對於我們其他人,我們可以利用xml中的bool值,並在不同的資源目錄中對它們進行不同的設置。

所以你AndroidManifest看起來是這樣的:

<receiver 
    android:label="@string/app_widget_small" 
    android:enabled="@bool/is_pre_api_11"> 

    <!-- App Widget Stuff Here --> 

</receiver> 
<receiver 
    android:label="@string/app_widget_large" 
    android:enabled="@bool/is_pre_api_11"> 

    <!-- App Widget Stuff Here --> 

</receiver> 
<receiver 
    android:label="@string/app_widget_resizeable" 
    android:enabled="@bool/is_post_api_11"> 

    <!-- App Widget Stuff Here --> 

</receiver> 

而且在/res/values/attrs.xml

<resources> 
    <bool name="is_pre_api_11">true</bool> 
    <bool name="is_post_api_11">false</bool> 
</resources> 

然後在/res/values-v11/attrs.xml

<resources> 
    <bool name="is_pre_api_11">false</bool> 
    <bool name="is_post_api_11">true</bool> 
</resources> 

現在你的API 10和下方有兩個應用程序小部件(小型和大型)以及API 11和更高版本我有一個可調整大小的應用程序部件。

+0

好像你可以使用一個布爾 – 2017-10-06 09:52:20

+0

@Alexey,是的,在這種情況下,你可以使用一個布爾值,這是4.5年前,但我敢肯定,我有其他條件,利用相同的策略。儘管如此,在這種簡單的情況下,只需一個布爾值就足夠了。 – xbakesx 2017-10-06 13:58:13