如何在Android中使用PreferenceScreen

11

我想使用 PreferenceScreen 来创建设置页面,我知道如何使用 EditTextPreferences 并使用该文本。但我不知道其他对象,例如:我不知道如何从 ListPreference 更改文本颜色,或者我不知道如何在 CheckBoxPreference 中显示/隐藏文本。

注意:请不要给出负面评价。 我在互联网上搜索了很久,但没有找到合适的主题,所以提出了这个问题。 请给我指导,而不是打负面评分!

主活动代码:

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代码:

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);
        }
    }
}

偏好设置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>

字符串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>

如何在 Java代码 中使用这些首选项?例如,如何使用 ListPreference 更改 TextView 的颜色?


@cricket_007,是的,我看了这个教程,我知道如何使用EditTextPreference,但我无法使用CheckboxPreferenceListPreference!你能告诉我如何使用吗?例如,如何使用ListPreference更改TextView颜色?谢谢<3 - Dr.NoBody
还可以参考这个教程,https://github.com/codepath/android_guides/wiki/Settings-with-PreferenceFragment - K.Sopheak
1个回答

8
请使用以下代码:
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
        }
    }
}

为了在活动中改变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
}

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

谢谢您提供这段代码。您能否告诉我如何使用ListPreference更改TextView的颜色?拜托了,我真的需要这个教程。谢谢。 - Dr.NoBody
你指的是哪个 TextView? - Zoran P
我在MainActivity中有一个TextView,我想从Preference Activity更改它的颜色。 - Dr.NoBody
@Si8 它只在 PreferenceActivity 中被弃用,自 API 11 开始,鼓励使用 PreferenceFragment。由于我的原始帖子使用了 PreferenceFragment,因此您的评论并没有变得无意义。 - Zoran P
1
@K.Sopheak,由于我不知道您如何实现您的首选项,因此我无法给出精确的答案。我可以给你一个例子。我使用PreferenceActivity和PreferenceFragment为每个首选项屏幕。我的PreferenceActivity定义了自己的布局,其中包含ListView,并使用setContentView(R.layout.preferences_activity)进行程序设置。您可以在首选项活动布局中的ListView元素中定义android:scrollbars =“none”。它也将应用于所有首选项片段。 - Zoran P
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接