preferenceActivity的Andr​​oid 4.0和更早的版本 [英] PreferenceActivity Android 4.0 and earlier

查看:95
本文介绍了preferenceActivity的Andr​​oid 4.0和更早的版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图在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以上)的工作。如果你想提供最好的用户体验,还支持较老的Andr​​oid版本,最好的做法在这里似乎是实现两个 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的Andr​​oid 4.0和更早的版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆