python preference界面设置_Preference 实现设置界面

Preference 能简便地实现设置界面,且主要优点是设置的值会自动通过 SharedPreferences 方式保存下来,可直接取用。

一、简易实现

res/xml/prefs.xml:

<?xml version="1.0" encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android">

android:title="显示一排偏好">

android:key="checkbox_preference"

android:title="开关偏好1"

android:summary="这是一个开关按钮1" />

android:key="switch_preference"

android:title="开关偏好2"

android:summary="这是一个开关按钮2" />

android:title="基于对话框的偏好">

android:key="edittext_preference"

android:title="文本输入偏好"

android:summary="使用一个文本框对话框"

android:dialogTitle="输入你的宠物" />

android:key="list_preference"

android:title="列表偏好"

android:summary="使用一个列表对话框"

android:entries="@array/entries_list_preference"

android:entryValues="@array/entryvalues_list_preference"

android:dialogTitle="选择一个" />

android:title="多选列表偏好"

android:key="multiSelectList_preference"

android:summary="使用一个多选列表对话框"

android:entries="@array/entries_list_preference"

android:entryValues="@array/entryvalues_list_preference"

android:dialogTitle="选择几个" />

android:title="启动偏好">

android:key="screen_preference"

android:title="屏幕"

android:summary="显示另一个偏好屏幕">

android:key="next_screen_checkbox_preference"

android:title="开关偏好"

android:summary="另一个屏幕上的偏好" />

android:title="意图偏好1"

android:summary="通过意图启动一个Activity">

android:targetClass="com.ttt.zhihudaily.activity.FavouriteActivity"

android:targetPackage="com.ttt.zhihudaily"/>

android:title="意图偏好2"

android:summary="通过意图启动一个链接">

android:data="http://www.baidu.com" />

android:title="偏好属性">

android:key="parent_checkbox_preference"

android:title="父开关"

android:summary="这是一个父开关" />

android:key="child_checkbox_preference"

android:dependency="parent_checkbox_preference"

android:layout="?android:attr/preferenceLayoutChild"

android:title="子开关"

android:summary="这是一个子开关" />

res/values/array.xml:

<?xml version="1.0" encoding="utf-8"?>

a

b

c

d

e

1

2

3

4

5

PrefsFragment:

package com.ttt.zhihudaily.fragment;

import android.os.Bundle;

import android.preference.PreferenceFragment;

import com.ttt.zhihudaily.R;

public class PrefsFragment extends PreferenceFragment {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.prefs);

}

}

Activity 中的 addPreferencesFromResource() 已经废弃,现在都推荐用 Fragment。

PrefsActivity:

package com.ttt.zhihudaily.activity;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.MenuItem;

import com.ttt.zhihudaily.R;

import com.ttt.zhihudaily.fragment.PrefsFragment;

public class PrefsActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_prefs);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

* getFragmentManager()

* .beginTransaction()

* .replace(R.id.prefs_frame,new PrefsFragment())

* .commit();

}

@Override

public boolean onOptionsItemSelected(MenuItem item){

switch (item.getItemId()){

case android.R.id.home:

finish();

break;

default:

break;

}

return true;

}

}

2b76fda697a4

二、获取设置值

prefs.xml 中有设置 android:key 属性,就可以通过这个 key 从 SharedPreferences 中取值。其他 Activity 或 Fragment 等都可以这样取到值。

public class PrefsFragment extends PreferenceFragment {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.prefs);

SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(getActivity());

Boolean checkbox=prefs.getBoolean("checkbox_preference",false);

Toast.makeText(getActivity(), ""+checkbox, Toast.LENGTH_SHORT).show();

}

}

三、设置点击事件和值改变事件

package com.ttt.zhihudaily.fragment;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.preference.CheckBoxPreference;

import android.preference.Preference;

import android.preference.PreferenceFragment;

import android.preference.PreferenceManager;

import android.preference.SwitchPreference;

import android.widget.CheckBox;

import android.widget.Toast;

import com.ttt.zhihudaily.R;

public class PrefsFragment extends PreferenceFragment

implements Preference.OnPreferenceChangeListener,Preference.OnPreferenceClickListener{

private SharedPreferences prefs;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.prefs);

prefs=PreferenceManager.getDefaultSharedPreferences(getActivity());

CheckBoxPreference cp=(CheckBoxPreference)findPreference("checkbox_preference");

SwitchPreference sp=(SwitchPreference)findPreference("switch_preference");

cp.setOnPreferenceClickListener(this);

sp.setOnPreferenceChangeListener(this);

}

@Override

public boolean onPreferenceChange(Preference preference, Object newValue) {

Toast.makeText(getActivity(), "开关按钮2的值是:"+newValue, Toast.LENGTH_SHORT).show();

return true;

}

@Override

public boolean onPreferenceClick(Preference preference) {

Boolean checkboxValue=prefs.getBoolean(preference.getKey(),false);

Toast.makeText(getActivity(), "开关按钮1的值是:"+checkboxValue, Toast.LENGTH_SHORT).show();

return true;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值