zoukankan      html  css  js  c++  java
  • 【转】 Pro Android学习笔记(六二):Preferences(6):header

    目录(?)[-]

    1. 代码实现
    2. header xml文件

    在前面的例子,我们主要学习了PreferenceScreen的xml如何写,preference有哪些类型。在代码中,我们为了不提示warning,加入了@SuppressWarnings("deprecation"),表明这是老版本的处理方式。自从Android 3.0引入fragment后,preference在实现有变化。

    PreferenceActivity能够根据设备的尺寸大小不同,提供不同的UI,如设备是平板,显示如下。左边是preference header,右边是PreferenceScreen对象。

    如设备是phone,显示如下:

    代码实现

    public class HeadPreferenceActivity extends PreferenceActivity
            
        @Override 
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState); 
            if(hasHeaders()){  //如有header,则在最下面加一个button。本例无论平板还是phone,都返回true
                Button button = new Button(this); 
                button.setText("Some Action"); 
                setListFooter(button); 
            } 
        } 

        @Override // 在PreferenceActivity的回调函数onBuildHeaders()中加入header
        public void onBuildHeaders(List<Header> target) { 
            loadHeadersFromResource(R.xml.header, target);
        } 
        
        // 如果不作为Fragment内部类,例如独立作为一个类,则不需要static,PreferenceFragment和之前老的PreferenceActivity相似,我们在此通过res/xml的资源加入PreferenceScreen。
       public static class Pref1Fragment extends PreferenceFragment{ 
            @Override 
            public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState); 
                Log.i("PRO args", "Pref1Fragment Arguments: " + getArguments());
                addPreferencesFromResource(R.xml.sound); //R.xml.sound为之前学习过的PreferenceScreen xml文件
            }          
        } 

        
        public static class Pref2Fragment extends PreferenceFragment{
            @Override 
            public void onCreate(Bundle savedInstanceState) {  
                super.onCreate(savedInstanceState); 
                Log.i("PRO args", "Pref2Fragment Arguments: " + getArguments());  //可以从xml文件中读取参数,类型为Bundle 
                addPreferencesFromResource(R.xml.complex);  //R.xml.complex为之前学习过的PreferenceScreen xml文件
            }         
        }  
        
    }

    在代码实现中,关键在于header的加入,我们来看看res/xml/header.xml文件

    header xml文件

    <?xml version="1.0" encoding="utf-8"?> 
    <preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
        <!-- 和fragment class属性相似,fragment属性为PreferenceFragment的类,用于用户点list中的改header后,获取对应的PreferenceScreen对象。本例为内部类 -->
        <header android:fragment="cn.wei.flowingflying.propreferences.HeadPreferenceActivity$Pref1Fragment"
            android:icon="@drawable/creep" 
            android:title="Sound" 
            android:summary="These are sound preferences" />  

        <!-- 第二个header,我们增加了extra data,可以在代码中读取,本例通过Log.d将相关信息显示,如下。用户按第一个header,显示第一行,参数为null,用户按第二个header时,显示第二行,通过Bundle来传递Extra信息 -->
         
        <header android:fragment="cn.wei.flowingflying.propreferences.HeadPreferenceActivity$Pref2Fragment"
            android:icon="@drawable/creep003" 
            android:title="Complex" 
            android:summary="These are complex preferences" > 
            <extra android:name="someKey" android:value="someHeaderValue" />
        </header> 

        <!-- 这是非内部类的试验,只要是PreferenceFragment,无论是否静态类、内部类,都可以 
        <header android:fragment="cn.wei.flowingflying.propreferences.ListPreferenceFragment"
            android:icon="@drawable/creep004" 
            android:title="List Preferences" 
            android:summary="These are list preferences" /> --> 

        <!-- header也可以通过intent唤起其他activity,而不只限于preference fragment,本例将通过浏览器打开某网页 -->
        <header android:icon="@drawable/ic_launcher" 
                android:title="Intent" 
                android:summary="Launches an Intent."> 
            <intent android:action="android.intent.action.VIEW"  android:data="http://www.android.com" />
        </header> 
        
    </preference-headers>

    本博文涉及的例子代码,可以在Pro Android学习:Preference(首选项)小例子中下载。

    相关链接: 我的Android开发相关文章

  • 相关阅读:
    ios每日一发--Leanclude数据云存储以及登录 注册账户
    ios每日一发--仿侧边抽屉效果
    ios-自定义alertView提示框
    ios
    UIStepper 缩放:UI的使用
    UIButton 关灯小实验
    将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)
    为集合排序的三个方法
    NSMutableDictionary
    头文件导入方式
  • 原文地址:https://www.cnblogs.com/blongfree/p/5048030.html
Copyright © 2011-2022 走看看