1

我的 android 应用程序中有一个 PreferenceActivity,用于显示设置屏幕。我想在其中添加一个“MultiSelectListPreference”,但我遇到了一个问题,即它不适用于 API11 之前的 android 版本,因为它是在 API11 中引入的。没问题,我通过两个 xml 布局解决了这个问题,一个在 res/xml-v11 中带有“MultiSelectListPreference”,另一个在 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>

如您所见,唯一的区别是列表中的第二个元素,其余部分完全相同。有没有更好的方法来处理这个问题,以便在一个文件中重用相同的代码并根据 Android 版本动态引用剩余部分?理想的解决方案看起来像这样:

<?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 和 res/xml 下拥有名为 days.xml 的文件,其中包含不同的部分。

在文档中以及在 StackOverflow 上搜索后,我找不到任何相关内容。android是否提供了一种方法来做到这一点?或者也许还有其他方法可以分解出通用代码?

4

1 回答 1

1

想到的是使用<include/>标签之类的东西。似乎您不能在首选项 xmls 中使用它,但您可以部分地创建您的首选项。因此,您需要PreferencesActivity像这样创建首选项(R.xml.prefs_days您的版本特定文件在哪里,有 2 个版本):

addPreferencesFromResource(R.xml.prefs_time);
addPreferencesFromResource(R.xml.prefs_days);
addPreferencesFromResource(R.xml.prefs_action);

嵌套的preferences.xml

于 2013-04-06T02:55:50.090 回答