zoukankan      html  css  js  c++  java
  • Android的设置界面及Preference使用

    一般来说,我们的APP都会有自己的设置页面,那么其实我们有非常简单的制作方法。老样子,先看效果图。


    然后就是看源代码了。

     第一步,先在res文件夹中新建一个xml文件夹,用来存放preferences.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    
        <PreferenceCategory android:title="显示一排偏好">
            <CheckBoxPreference
                android:key="checkbox_preference"
                android:summary="这是一个开关按钮"
                android:title="开关偏好" />
        </PreferenceCategory>
        <PreferenceCategory android:title="基于对话框的偏好">
            <EditTextPreference
                android:dialogTitle="输入你的宠物"
                android:key="edittext_preference"
                android:summary="使用一个文本框对话框"
                android:title="文本输入偏好" />
            <ListPreference
                android:dialogTitle="选择一个"
                android:entries="@array/entries_list_preference"
                android:entryValues="@array/entryvalues_list_preference"
                android:key="list_preference"
                android:summary="使用一个列表对话框"
                android:title="列表偏好" />
        </PreferenceCategory>
        <PreferenceCategory android:title="启动偏好">
            <PreferenceScreen
                android:key="screen_preference"
                android:summary="显示另一个偏好屏幕"
                android:title="屏幕">
    
                <CheckBoxPreference
                    android:key="next_screen_checkbox_preference"
                    android:summary="另一个屏幕上的偏好"
                    android:title="开关偏好" />
            </PreferenceScreen>
    
            <PreferenceScreen
                android:summary="通过意图启动一个Activity"
                android:title="意图偏好">
                <intent
                    android:action="android.intent.action.VIEW"
                    android:data="http://www.baidu.com" />
            </PreferenceScreen>
        </PreferenceCategory>
        <PreferenceCategory android:title="偏好属性">
            <CheckBoxPreference
                android:key="parent_checkbox_preference"
                android:summary="这是一个父开关"
                android:title="父开关" />
            <CheckBoxPreference
                android:dependency="parent_checkbox_preference"
                android:key="child_checkbox_preference"
                android:layout="?android:attr/preferenceLayoutChild"
                android:summary="这是一个子开关"
                android:title="子开关" />
        </PreferenceCategory>
    </PreferenceScreen>

     第二步,在string.xml文件中添加项数组

    <resources>
        <string name="app_name">My Application</string>
            <string-array name="entries_list_preference">
                <item>IT</item>
                <item>Commerce</item>
                <item>HR</item>
            </string-array>
            <string-array name="entryvalues_list_preference">
                <item>001</item>
                <item>002</item>
                <item>003</item>
            </string-array>
        </resources>

     第三步,让Activity继承PreferenceActivity(其实这种方式目前会提示过期,但是没关系),然后在重写onCreate方法,添加preferences.xml作为显示界面。

     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    //      setContentView(R.layout.activity_setting);
            addPreferencesFromResource(R.xml.preferences);
        }

    做到这一步,其实已经可以运行并看到效果了。但那么我们要如何拿到这些数据呢?那么修改下 代码

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
    
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
            boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
            boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
            String text = sp.getString("edittext_preference", "");
            String listtext = sp.getString("list_preference", "");
            Log.i("lenve", ON_OFF+"--"+next_screen+"--"+text+"--"+listtext);
        }

    可是有的时候我们如果希望更改后立马被系统获知选项已被更改,又该如何?复写继承了PreferenceActivity的类中的onPreferenceTreeClick方法,这个方法会在设置修改时触发。

        @Override
        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
            SharedPreferences sp = preference.getSharedPreferences();
            boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
            Log.i("lenve", ON_OFF+"");
            String text = sp.getString("edittext_preference", "");
            Log.i("lenve", text+"");
            String listtext = sp.getString("list_preference", "");
            Log.i("lenve", listtext+"");
            boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
            Log.i("lenve", next_screen+"");
            return true;
        }

    好了,啰嗦到现在,我们直接看整个MainActivity的代码吧

    package com.example.linfeng.myapplication;
    
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.preference.Preference;
    import android.preference.PreferenceActivity;
    import android.preference.PreferenceManager;
    import android.preference.PreferenceScreen;
    import android.util.Log;
    
    public class MainActivity extends PreferenceActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
    
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
            boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
            boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
            String text = sp.getString("edittext_preference", "");
            String listtext = sp.getString("list_preference", "");
            Log.i("lenve", ON_OFF+"--"+next_screen+"--"+text+"--"+listtext);
        }
    
    
        @Override
        public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
            SharedPreferences sp = preference.getSharedPreferences();
            boolean ON_OFF = sp.getBoolean("checkbox_preference", false);
            Log.i("lenve", ON_OFF+"");
            String text = sp.getString("edittext_preference", "");
            Log.i("lenve", text+"");
            String listtext = sp.getString("list_preference", "");
            Log.i("lenve", listtext+"");
            boolean next_screen = sp.getBoolean("next_screen_checkbox_preference", false);
            Log.i("lenve", next_screen+"");
            return true;
        }
    }

    就这么简单。OK啦

  • 相关阅读:
    UML类图与类的关系详解
    UML用例图总结
    jQuery随机抽取数字号代码
    贪心算法
    回溯法实例详解(转)
    React 表单元素实例
    React 组件嵌套 父子关系
    React 滚动事件
    error: Error trying to parse settings: Unexpected trailing characters in PackagesUserPreferences.sublime-settings:9:2 reloading settings Packages/User/Preferences.sublime-settings
    jquery 下拉框左右选择
  • 原文地址:https://www.cnblogs.com/linfenghp/p/9375293.html
Copyright © 2011-2022 走看看