preferenceActivity的Android 4.0和更早的版本 [英] PreferenceActivity Android 4.0 and earlier
问题描述
试图在ApiDemos不同preference活动为Android 4.0,我看到了code,部分方法是pcated在preferencesFrom code.java德$ P $,例如。
Trying the different preference activities in the ApiDemos for Android 4.0, I see in the code that some methods are deprecated in PreferencesFromCode.java, for example.
我的问题是:如果我使用preferenceFragment,将它用于所有版本的工作,或者只有3.0或4.0,最多
So my question is: if I use PreferenceFragment, will it work for all version or only 3.0 or 4.0 and up?
如果是这样,我应该使用适用于2.2和2.3呢?
If so, what should I use that works for 2.2 and 2.3 as well?
推荐答案
preferenceFragment
不会对2.2和2.3(仅API级别11以上)的工作。如果你想提供最好的用户体验,还支持较老的Android版本,最好的做法在这里似乎是实现两个 preferenceActivity
类,并在运行时决定哪个要调用。然而,这种方法仍包括调用pcated德$ P $的API,但你不能避免。
PreferenceFragment
will not work on 2.2 and 2.3 (only API level 11 and above). If you want to offer the best user experience and still support older Android versions, the best practice here seems to be to implement two PreferenceActivity
classes and to decide at runtime which one to invoke. However, this method still includes calling deprecated APIs, but you can't avoid that.
因此,例如,你有一个 preference_headers.xml
:
So for instance, you have a 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
(因为较低的空气污染水平已经没有太大的改变):
and a standard preferences.xml
(which hasn't changed much since lower API levels):
<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
:
And finally, you need two implementations of PreferenceActivity
, for API levels supporting or not supporting 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);
}
}
目前要显示preference屏幕给用户的时候,你决定开始哪一个:
At the point where you want to display the preference screen to the user, you decide which one to start:
if (Build.VERSION.SDK_INT < 11) {
startActivity(new Intent(this, PreferencesActivity.class));
} else {
startActivity(new Intent(this, OtherPreferencesActivity.class));
}
因此,基本上,你必须每个片段的XML文件,手动的API等级和其中每个加载这些XML文件; 11,并且两个活动使用相同的preferences。
So basically, you have an xml file per fragment, you load each of these xml files manually for API levels < 11, and both Activities use the same preferences.
这篇关于preferenceActivity的Android 4.0和更早的版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!