在Android 4.0的ApiDemos中尝试不同的首选项 Activity 时,我在代码中看到例如PreferencesFromCode.java中不赞成使用某些方法。
所以我的问题是:如果我使用PreferenceFragment,它将适用于所有版本还是仅适用于3.0或4.0及更高版本?
如果是这样,那我应该使用在2.2和2.3上都可以使用的东西吗?
最佳答案
PreferenceFragment
在2.2和2.3(仅API级别11及更高版本)上不起作用。如果要提供最佳用户体验并仍支持较旧的Android版本,则此处的最佳实践似乎是实现两个PreferenceActivity
类,并在运行时确定要调用哪个类。但是,此方法仍然包括调用已弃用的API,但是您不能避免这种情况。
例如,您有一个preference_headers.xml
:
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
<header android:fragment="your.package.PrefsFragment"
android:title="...">
<extra android:name="resource" android:value="preferences" />
</header>
</preference-headers>
和一个标准的
preferences.xml
(自较低的API级别以来并没有太大变化):<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="...">
...
</PreferenceScreen>
然后,您需要实现
PreferenceFragment
:public static class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
最后,对于支持或不支持
PreferenceActivity
的API级别,您需要两种实现PreferenceFragments
:public class PreferencesActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
addPreferencesFromResource(R.xml.other);
}
}
和:
public class OtherPreferencesActivity extends PreferenceActivity {
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preference_headers, target);
}
}
在要向用户显示首选项屏幕时,您决定从哪个屏幕开始:
if (Build.VERSION.SDK_INT < 11) {
startActivity(new Intent(this, PreferencesActivity.class));
} else {
startActivity(new Intent(this, OtherPreferencesActivity.class));
}
因此,基本上,每个片段都有一个xml文件,您为
关于android - PreferenceActivity Android 4.0及更低版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10186697/