1

設定画面を表示するために使用する Android アプリに PreferenceActivity があります。その中に「MultiSelectListPreference」を入れたいのですが、API11で導入されたため、API11より前のバージョンのAndroidでは動作しないという問題が発生しました。1 つは res/xml-v11 に「MultiSelectListPreference」があり、もう 1 つは res/xml に「Preference」だけがあり、カスタム ダイアログで処理します。

res/xml-v11 の xml ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference android:key="time"
            android:persistent="false"
            android:title="@string/time" />
<MultiSelectListPreference android:key="days_multi"
                           android:persistent="false"
                           android:title="@string/days" />
<ListPreference android:key="action"
                android:persistent="false"
                android:title="@string/action" />
</PreferenceScreen>

res/xml にあるものは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference android:key="time"
            android:persistent="false"
            android:title="@string/time" />
<Preference android:key="days_dialog"
            android:persistent="false"
            android:title="@string/days" />
<ListPreference android:key="action"
                android:persistent="false"
                android:title="@string/action" />
</PreferenceScreen>

ご覧のとおり、違いはリストの 2 番目の要素だけで、残りはまったく同じです。Android のバージョンに応じて、1 つのファイルで同じコードを再利用し、残りの部分を動的に参照するためにこれを処理するより良い方法はありますか? 理想的なソリューションは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference android:key="time"
            android:persistent="false"
            android:title="@string/time" />
<Preference source="days.xml" />
<ListPreference android:key="action"
                android:persistent="false"
                android:title="@string/action" />
</PreferenceScreen>

res/xml-v11 の下に days.xml というファイルと、異なる部分を含む res/xml というファイルもあります。

ドキュメントに関連するものは何も見つかりませんでした。ここで StackOverflow を検索しました。アンドロイドはこれを行う方法を提供していますか? それとも、一般的なコードを除外する他の方法があるのでしょうか?

4

1 に答える 1