preferenceActivity的Andr​​oid 4.0和更早的版本更早、版本、Andr、preferenceActivity

由网友(颩欥潵孒冋憶)分享简介:试图在ApiDemos不同preference活动为Android 4.0,我看到了code,部分方法是pcated在preferencesFrom code.java德$ P $,例如。 Trying the different preference activities in the ApiDemos for A...

试图在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.

阅读全文

相关推荐

最新文章