Android设置界面之Preference

题图 www.gratisography.com

Android系统为设置界面的UI提供了一系列的接口,设置界面的部分和Activity是分离的,会有一个PreferenceScreen的对象
是根目录,在其中会包含CheckBoxPreference EditTextPreference ListPreference PreferenceCategory RingtonePreference

  • 相关的接口

    Preference.OnPreferenceChangeListenerPreference.OnPreferenceClickListenerPreferenceFragment.OnPreferenceStartFragmentCallbackPreferenceManager.OnActivityDestroyListenerPreferenceManager.OnActivityResultListenerPreferenceManager.OnActivityStopListener
  • 相关的类

    CheckBoxPreferenceDialogPreferenceEditTextPreferenceListPreferenceMultiSelectListPreferencePreferencePreference.BaseSavedStatePreferenceActivityPreferenceActivity.HeaderPreferenceCategoryPreferenceFragmentPreferenceGroupPreferenceManagerPreferenceScreenRingtonePreferenceSwitchPreferenceTwoStatePreference

概述

由于设置的界面是使用Preference而不是View来创建的,需要特殊的Activity或者Fragment的子类来显示

  • 版本低于Android 3.0(API 10),请使用PreferenceActivity
  • 版本高于Android 3.0(API 10),可以在普通的Activity中使用PreferenceFragment来显示,也可以使用PreferenceActivity

在XML中定义Preference

可以在运行时创建Preference也可以通过在xml中定义Preference,每一个Preference的子类都可以用XML中的元素来定义,在 res/xml/
文件夹中创建一个文件如preference.xml

如果想定义分屏的设置布局,需要分别定义XML

preference.xml一般的布局如下:

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

创建PreferenceActivity

  • 定义xml文件

    res/xml/文件夹中定义 preference.xml

    <?xml version="1.0" encoding="utf-8"?>                        .....            
  • Activity继承PreferenceActivity

    public class SettingsActivity1 extends PreferenceActivity{@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    addPreferencesFromResource(R.xml.preference); //API 10之后的版本这个方法以及过时,推荐使用Fragment的方式  }}

使用Preference Fragments

在高于Android 3.0(API 10)的版本,应该使用PreferenceFragment来显示Preference,就不需要继承PreferenceActivity
继承PreferenceFragmentonCreate()方法中调用addPreferencesFromResource()方法

public class SettingsFragment extends PreferenceFragment{  @Override  public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      this.addPreferencesFromResource(R.xml.preference);  }}

创建一个Activity,然后将定义的Fragments添加到当前的Activity中,最终呈现的效果和PreferenceActivity是一样的

public class SettingsActivity2 extends Activity{  @Override  protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      this.getFragmentManager().beginTransaction()          .replace(android.R.id.content, new SettingsFragment())          .commit();  }}
  • 显示新条目
  
  • list view preference
  • 输入框

使用Preference Header

  • 为每一个设置文件单独创建一个PreferenceFragment的实例
  • 创建headers的XML文件,在fragment中设置对应的PreferenceFragment的实例
  • 使用PreferenceActivity
  • 实现obBuildHeaders()方法
<?xml version="1.0" encoding="utf-8"?>  

元素中的内容,可以通过Bundle获得,通过方法getArguments()获取

显示headers使用PreferenceActivity的回调方法onBuildHeaders()加载preference-headers.xml文件

@Overridepublic void onBuildHeaders(List
target) { super.onBuildHeaders(target); loadHeadersFromResource(R.xml.preference_header, target);}

自定义Preference的布局

通过Preference的属性android:layout=""设置自定义的layout文件

更多相关文章

  1. Android(安卓)认识EventBus到原理解析
  2. mac下反编译android apk
  3. Android(安卓)下载一个文件以及打开这个apk文件
  4. android开发之onCreate( )方法详解
  5. 国际化资源文件,配置不完整导致报错
  6. Android(安卓)桌面悬浮框
  7. Failed to fectch URl https://dl-ssl.google.com/android/repos
  8. 改变分隔条,基于数组的ListView
  9. Android(安卓)的 Recovery 模式分析

随机推荐

  1. Android安全机制解析与应用实践
  2. 分享一些实用的Android资源
  3. Python+Android开发
  4. Android开发优秀博文收录
  5. Android中设置控件可见与不可见详解
  6. Android图文详解属性动画
  7. android蓝牙BLE(三) —— 广播
  8. Android快速开发架构PlanA(四),网络请求篇,划
  9. Android——OOM以及内存优化
  10. Android和Linux kernel发展史