java 如何在 Android 中使用 PreferenceScreen

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/35599108/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 00:20:34  来源:igfitidea点击:

How to use PreferenceScreen in Android

javaandroidxmlandroid-preferencespreferenceactivity

提问by Dr.NoBody

i want use PreferenceScreenfor setting page, i know use EditTextPreferencesand use this text. but i don't know other Objects, for example : i don't know change text color from ListPreference, or i don't know show/hide text from CheckBoxPreference.

我想PreferenceScreen用于设置页面,我知道使用EditTextPreferences和使用此文本。但我不知道其他对象,例如:我不知道从 更改文本颜色ListPreference,或者我不知道从CheckBoxPreference.

Attention :Please do not negative. I searched on the internet but could not find an appropriate topic, So here's the question I asked. Please guide me instead of giving a negative rating!

注意:请不要否定。我在互联网上搜索但找不到合适的主题,所以这是我问的问题。请指导我而不是给负面评价!

Main Activity code :

主要活动代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_page);

    ///--- Setting Options
    summary_tv = (TextView) findViewById(R.id.main_summary_text);
    preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String colors = "";
    String main_title_text = preferences.getString("setting_title_text", "main_title");
    summary_tv.setText(main_title_text);
    Boolean main_title_show = preferences.getBoolean("setting_title_show", true);

Preference Activity code :

偏好活动代码:

public class SettingPage extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
    }

    public static class MyPreferenceFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(final Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.setting_prefrences);
        }
    }
}

Preference XML code :

首选项 XML 代码:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:key="setting_title_title_category"
        android:title="Title options">

    <CheckBoxPreference
        android:id="@+id/setting_title_show_id"
        android:key="setting_title_show"
        android:title="Show Main Title"
        android:summary="Show/hide MainPage title" />

    <EditTextPreference
        android:key="setting_title_text"
        android:title="Set Main Title"
        android:summary="Change MainPage title"
        android:dialogTitle="Change Title"
        android:dialogMessage="Change title please..."/>

    </PreferenceCategory>

    <PreferenceCategory
        android:key="setting_title_font_category"
        android:title="Font options">

        <ListPreference
            android:key="setting_title_font_color"
            android:title="Title font colors"
            android:summary="Change title font colors"
            android:entries="@array/colors"
            android:entryValues="@array/colors"
            android:dialogTitle="Change font color" />

    </PreferenceCategory>

    <RingtonePreference
        android:title="tes"/>

</PreferenceScreen>

String XML code :

字符串 XML 代码:

<resources>
    <string name="app_name">1-MyTestDb Project</string>
    <string name="title_activity_settings">Settings</string>

    <string-array name="colors">

        <item>White</item>
        <item>Black</item>
        <item>Primary</item>

    </string-array>

</resources>

How can use this preferencesin java code. for example change TextViewcolor with ListPreference?

如何在java 代码中使用此首选项。例如改变颜色?TextViewListPreference

采纳答案by Zoran P

Use the following code:

使用以下代码:

public static class MyPreferenceFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener
{
    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.setting_prefrences);
    }

    @Override
    protected void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
         super.onPause();
         getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
    {
        if (key.equals("setting_title_font_color"))
        {
            // get preference by key
            Preference pref = findPreference(key);
            // do your stuff here
        }
    }
}

To change the TextView color in activity you need to add the following code to your activity onCreate():

要更改活动中的 TextView 颜色,您需要将以下代码添加到您的活动 onCreate() 中:

String color = preferences.getString("setting_title_font_color", "White");
if (color.equals("White") {
    summary_tv.setTextColor(Color.WHITE);
} else if (color.equals("Black") {
    summary_tv.setTextColor(Color.BLACK);
} else {
    // default color
}

Note: the color will be changed only when activity is first created. If you wish to update color while activity is running, then put this code in onResume() method.

注意:只有在首次创建活动时才会更改颜色。如果您希望在活动运行时更新颜色,请将此代码放在 onResume() 方法中。