2013-04-06 57 views
1

我在我的android应用程序中有一个PreferenceActivity,用于显示设置屏幕。我想在其中有一个“MultiSelectListPreference”,但我遇到了一个问题,它不适用于API的pre-API11版本,因为它已在API11中引入。 没问题,在那里,我有两个xml布局,其中一个带有位于res/xml-v11中的“MultiSelectListPreference”,另一个带有“Preference”驻留在res/xml中,我使用自定义对话框处理。根据SDK版本动态加载首选项

在水库中的XML文件/ XML-V11看起来是这样的:

<?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> 

正如你所看到的,只有differense是列表中的第二个元素,其余部分完全相同。有没有更好的方法来处理这个问题,以便在一个文件中重复使用相同的代码并根据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和包含一块是不同的RE/XML称为days.xml。

我在文档中找不到与StackOverflow相关的任何内容。 Android提供了一种方法来做到这一点?或者也许有其他方法来分解通用代码?

回答

1

想到的是使用类似<include/>标签的东西。看起来你不能在偏好xmls中使用它,但是你可以在部分中创建你的偏好。所以,你需要在你的PreferencesActivity像这样(其中R.xml.prefs_days是2个版本的版本特定的文件)创建的首选项:

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

Nested preferences.xml

+0

这正是我发布这个问题后认为正确的做法: )它确实对我有用。但是我可以在这里看到sevaral的缺点,即如果它们分布在多个文件中,如何将多个首选项包装到PreferenceCategory中? – 2013-04-06 02:59:47

+0

好的问题,这是超出我的领域的知识领域,因为我没有以这种更先进的方式使用它们。 – 2013-04-06 03:03:41