2012-03-13 7 views
14

私は、Androidの前のHonecombバージョンとHoneycomb以降のサイズ変更可能なスクロール可能なリストビューウィジェット用に異なるサイズの3つのアプリウィジェットを作成しました。APIレベルに応じてアプリウィジェットを非表示にする

ウィジェットは同じ機能を提供し、ハニカムを対象とし、後でサイズ変更が可能なため、APIレベル12以降の他のバージョンのウィジェットを削除したいと考えています。これは何とか可能ですか?

AppWidgetProviderInfoリソースファイルが見つかると、AppWidgetServiceによってウィジェットが登録されるのを無効にする方法はないようです。したがって、それ以降のバージョンでウィジェットだけを含めることはできますが、以前のバージョンのAPIを対象とするxmlフォルダーに定義されているバージョンは除外できません。

答えて

9

HC前またはHCの実装があるアプリウィジェットが1つの場合は、それらを1つのAppWidgetProviderに結合し、res/xml-v11/res/xml/を使用して異なるメタデータを持つことができます。

私はあなたのシナリオを処理するための考えることができる唯一の方法は、しかし、android.os.Build.VERSIONに基づいてアプリの最初の実行時に、あなたのプロバイダを有効または無効、その後、マニフェスト(android:enabled="false")で無効としてAppWidgetProvidersの一部をマークすることですPackageManagersetComponentEnabledSetting()を使用して、適切なセットを提供してください。 Android 3.1以降では、ユーザーが少なくとも1つのアクティビティを起動してアプリウィジェットを追加する必要があるため、少なくともこのロジックを適用するエントリポイントがあります。

+0

ありがとうございます。この解決策は素晴らしいです。代わりに 'appwidget-provider'で' android:enabled'属性を使うことができれば良いでしょうが、これは必要です。:) – davidk

+0

@CommonsWareでは簡単なアイデアを出してくれますか? – Harshid

+1

'xml'ファイルをブール値で作成するのはなぜでしょうか? 'res/values-v11 /'(またはそれを除外する必要があるもの)でブール値をfalseに設定し、 'AndroidManifest'で' android:enabled = "@ bool/enable_listview_appwidget" 'のブール値を参照しますか? – xbakesx

19

OPはすでに彼の解決策を得ていますが、残りの部分ではboolの値をxmlに入れて、別のリソースディレクトリに設定することができます。

<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中:

は、だからあなたAndroidManifestは次のようなものになります

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

今、あなたのAPI 10を、以下2を持っていますアプリウィジェット(大小)とAPI 11以上私は一つのサイズ変更可能なアプリウィジェットを持っています。

+0

はちょうど1つのブールを使うことができると思われます。 –

+0

@Alexey、この場合、あなたは今、4.5年前のブール値を使うことができますが、私は同じ戦術を活用するために他の条件があると確信しています。しかし、この単純なケースではただ1つのブール値で十分です。 – xbakesx

関連する問題