Pro Android学习笔记(六二):Preferences(6):header

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

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

Pro Android学习笔记(六二):Preferences(6):header_第1张图片

如设备是phone,显示如下:

Pro Android学习笔记(六二):Preferences(6):header_第2张图片

代码实现

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

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文件


xmlns:android="http://schemas.android.com/apk/res/android" >
   
    <header android:fragment="cn.wei.flowingflying.propreferences.HeadPreferenceActivity$Pref1Fragment"
        android:icon="@drawable/creep"
        android:title="Sound"
        android:summary="These are sound preferences" /> 

   
    
   

        android:icon="@drawable/creep003"
        android:title="Complex"
        android:summary="These are complex preferences" >
       
   


   

   
   
            android:title="Intent"
            android:summary="Launches an Intent.">
       
   

   

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

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

你可能感兴趣的:(Android)