自定义PreferenceActivity——修改Preference样式、加顶部布局

自定义PreferenceActivity——修改Preference样式、加顶部布局


首先在res/xml文件夹下建立preferences.xml

01<?xml version="1.0" encoding="utf-8"?>
02<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
03 
04    <PreferenceCategory android:title="inline_preferences" >
05 
06        <CheckBoxPreference
07            android:key="checkbox_preference"
08            android:summary="summary_toggle_preference"
09            android:title="title_toggle_preference" />
10    </PreferenceCategory>
11 
12    <PreferenceCategory android:title="dialog_based_preferences" >
13 
14        <EditTextPreference
15            android:dialogTitle="dialog_title_edittext_preference"
16            android:key="edittext_preference"
17            android:summary="summary_edittext_preference"
18            android:title="title_edittext_preference" />
19 
20        <ListPreference
21            android:dialogTitle="dialog_title_list_preference"
22            android:entries="@array/entries_list_preference"
23            android:entryValues="@array/entryvalues_list_preference"
24            android:key="list_preference"
25            android:summary="summary_list_preference"
26            android:title="title_list_preference" />
27    </PreferenceCategory>
28 
29    <PreferenceCategory android:title="launch_preferences" >
30 
31        <PreferenceScreen
32            android:key="screen_preference"
33            android:summary="summary_screen_preference"
34            android:title="title_screen_preference" >
35 
36            <CheckBoxPreference
37                android:key="next_screen_checkbox_preference"
38                android:summary="summary_next_screen_toggle_preference"
39                android:title="title_next_screen_toggle_preference" />
40        </PreferenceScreen>
41 
42        <PreferenceScreen
43            android:summary="summary_intent_preference"
44            android:title="title_intent_preference" >
45 
46            <intent
47                android:action="android.intent.action.VIEW"
48                android:data="http://www.android.com" />
49        </PreferenceScreen>
50    </PreferenceCategory>
51 
52    <PreferenceCategory android:title="preference_attributes" >
53 
54        <CheckBoxPreference
55            android:key="parent_checkbox_preference"
56            android:summary="summary_parent_preference"
57            android:title="title_parent_preference" />
58 
59        <CheckBoxPreference
60            android:dependency="parent_checkbox_preference"
61            android:key="child_checkbox_preference"
62            android:layout="?android:attr/preferenceLayoutChild"
63            android:summary="summary_child_preference"
64            android:title="title_child_preference" />
65    </PreferenceCategory>
66 
67</PreferenceScreen>

然后在代码中加载preferences.xml

1public class MyPreferenceActivity extends PreferenceActivity {
2    /** Called when the activity is first created. */
3    @Override
4    public void onCreate(Bundle savedInstanceState) {
5        super.onCreate(savedInstanceState);
6        addPreferencesFromResource(R.xml.preferences);
7    }
8}

这样就创建了从xml加载preferences的默认的PreferenceActivity。

在加载了preferences.xml的PreferenceActivity中, a top-level preference是一个PreferenceScreen,可用getPreferenceScreen()获取。PreferenceScreen和PreferenceCategory继承自PreferenceGroup,它们可以包含一个或多个PreferenceScreen,PreferenceCategory或者是具体的preference(如EditTextPreference、CheckBoxPreference)。由于PreferenceScreen,PreferenceCategory,EditTextPreference等都是继承自Preference,因此可以通过setLayoutResource()方法设置自己的布局样式。下面将遍历所有Preference,并设置自己的样式,代码如下:

01private void setLayoutResource(Preference preference) {
02        if (preference instanceof PreferenceScreen) {
03            PreferenceScreen ps = (PreferenceScreen) preference;
04            ps.setLayoutResource(R.layout.preference_screen);
05            int cnt = ps.getPreferenceCount();
06            for (int i = 0; i < cnt; ++i) {
07                Preference p = ps.getPreference(i);
08                setLayoutResource(p);
09            }
10        } else if (preference instanceof PreferenceCategory) {
11            PreferenceCategory pc = (PreferenceCategory) preference;
12            pc.setLayoutResource(R.layout.preference_category);
13            int cnt = pc.getPreferenceCount();
14            for (int i = 0; i < cnt; ++i) {
15                Preference p = pc.getPreference(i);
16                setLayoutResource(p);
17            }
18        } else {
19            preference.setLayoutResource(R.layout.preference);
20        }
21    }
1PreferenceScreen preferenceScreen = getPreferenceScreen();
2        setLayoutResource(preferenceScreen);

preference_screen.xml

01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:layout_width="match_parent"
04    android:layout_height="wrap_content"
05    android:gravity="center_vertical"
06    android:minHeight="?android:attr/listPreferredItemHeight"
07    android:paddingRight="?android:attr/scrollbarSize" >
08 
09    <ImageView
10        android:id="@+android:id/icon"
11        android:layout_width="wrap_content"
12        android:layout_height="wrap_content"
13        android:layout_gravity="center"
14        android:src="@drawable/ic_launcher"/>
15 
16    <RelativeLayout
17        android:layout_width="wrap_content"
18        android:layout_height="wrap_content"
19        android:layout_marginBottom="6dip"
20        android:layout_marginLeft="15dip"
21        android:layout_marginRight="6dip"
22        android:layout_marginTop="6dip"
23        android:layout_weight="1" >
24 
25        <TextView
26            android:id="@+android:id/title"
27            android:layout_width="wrap_content"
28            android:layout_height="wrap_content"
29            android:ellipsize="marquee"
30            android:fadingEdge="horizontal"
31            android:singleLine="true"
32            android:textAppearance="@android:style/TextAppearance.Large"
33            android:textColor="#FFFF1234"
34            />
35 
36        <TextView
37            android:id="@+android:id/summary"
38            android:layout_width="wrap_content"
39            android:layout_height="wrap_content"
40            android:layout_alignLeft="@android:id/title"
41            android:layout_below="@android:id/title"
42            android:maxLines="4"
43            android:textAppearance="@android:style/TextAppearance.Small"
44            android:textColor="#FF888888" />
45    </RelativeLayout>
46 
47    <LinearLayout
48        android:id="@+android:id/widget_frame"
49        android:layout_width="wrap_content"
50        android:layout_height="match_parent"
51        android:gravity="center_vertical"
52        android:orientation="vertical" />
53 
54</LinearLayout>

preference_category.xml
01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:layout_width="match_parent"
04    android:layout_height="wrap_content"
05    android:background="#FF123456"
06    android:gravity="center_vertical"
07    android:minHeight="?android:attr/listPreferredItemHeight"
08    android:paddingRight="?android:attr/scrollbarSize" >
09 
10    <ImageView
11        android:id="@+android:id/icon"
12        android:layout_width="wrap_content"
13        android:layout_height="wrap_content"
14        android:layout_gravity="center"
15        android:src="@drawable/ic_launcher" />
16 
17    <RelativeLayout
18        android:layout_width="wrap_content"
19        android:layout_height="wrap_content"
20        android:layout_marginBottom="6dip"
21        android:layout_marginLeft="15dip"
22        android:layout_marginRight="6dip"
23        android:layout_marginTop="6dip"
24        android:layout_weight="1" >
25 
26        <TextView
27            android:id="@+android:id/title"
28            android:layout_width="wrap_content"
29            android:layout_height="wrap_content"
30            android:ellipsize="marquee"
31            android:fadingEdge="horizontal"
32            android:singleLine="true"
33            android:textAppearance="@android:style/TextAppearance.Large"
34            android:textColor="#FFFF0000" />
35 
36        <TextView
37            android:id="@+android:id/summary"
38            android:layout_width="wrap_content"
39            android:layout_height="wrap_content"
40            android:layout_alignLeft="@android:id/title"
41            android:layout_below="@android:id/title"
42            android:maxLines="4"
43            android:textAppearance="@android:style/TextAppearance.Small"
44            android:textColor="#FF00FF00" />
45    </RelativeLayout>
46 
47    <LinearLayout
48        android:id="@+android:id/widget_frame"
49        android:layout_width="wrap_content"
50        android:layout_height="match_parent"
51        android:gravity="center_vertical"
52        android:orientation="vertical" />
53 
54</LinearLayout>

preference.xml

01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:layout_width="match_parent"
04    android:layout_height="wrap_content"
05    android:gravity="center_vertical"
06    android:minHeight="?android:attr/listPreferredItemHeight"
07    android:paddingRight="?android:attr/scrollbarSize" >
08 
09    <ImageView
10        android:id="@+android:id/icon"
11        android:layout_width="wrap_content"
12        android:layout_height="wrap_content"
13        android:layout_gravity="center" />
14 
15    <RelativeLayout
16        android:layout_width="wrap_content"
17        android:layout_height="wrap_content"
18        android:layout_marginBottom="6dip"
19        android:layout_marginLeft="15dip"
20        android:layout_marginRight="6dip"
21        android:layout_marginTop="6dip"
22        android:layout_weight="1" >
23 
24        <TextView
25            android:id="@+android:id/title"
26            android:layout_width="wrap_content"
27            android:layout_height="wrap_content"
28            android:ellipsize="marquee"
29            android:fadingEdge="horizontal"
30            android:singleLine="true"
31            android:textAppearance="@android:style/TextAppearance.Medium"
32            android:textColor="#FF00FFFF" />
33 
34        <TextView
35            android:id="@+android:id/summary"
36            android:layout_width="wrap_content"
37            android:layout_height="wrap_content"
38            android:layout_alignLeft="@android:id/title"
39            android:layout_below="@android:id/title"
40            android:maxLines="4"
41            android:textAppearance="@android:style/TextAppearance.Small"
42            android:textColor="#FFFFFF00" />
43    </RelativeLayout>
44 
45    <LinearLayout
46        android:id="@+android:id/widget_frame"
47        android:layout_width="wrap_content"
48        android:layout_height="match_parent"
49        android:gravity="center_vertical"
50        android:orientation="vertical" />
51 
52</LinearLayout>


下面介绍加顶部布局,其实也是添加加一个preference,通过preferenceScreen的addPreference添加。首先自定义一个PreferenceHead,布局中有一个返回按钮。

01package com.preference.main;
02 
03import android.content.Context;
04import android.preference.Preference;
05import android.view.View;
06import android.view.View.OnClickListener;
07import android.widget.Button;
08 
09public class PreferenceHead extends Preference {
10 
11    private OnClickListener onBackButtonClickListener;
12 
13    public PreferenceHead(Context context) {
14        super(context);
15        setLayoutResource(R.layout.preference_head);
16    }
17 
18    @Override
19    protected void onBindView(View view) {
20        super.onBindView(view);
21        Button btBack = (Button) view.findViewById(R.id.back);
22        btBack.setOnClickListener(new OnClickListener() {
23 
24            @Override
25            public void onClick(View v) {
26                if (onBackButtonClickListener != null) {
27                    onBackButtonClickListener.onClick(v);
28                }
29            }
30        });
31    }
32 
33    public void setOnBackButtonClickListener(OnClickListener onClickListener) {
34        this.onBackButtonClickListener = onClickListener;
35    }
36}

01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:layout_width="match_parent"
04    android:layout_height="60.0dip"
05    android:background="#8000FF00"
06    android:gravity="center_vertical" >
07 
08    <Button
09        android:id="@+id/back"
10        android:layout_width="wrap_content"
11        android:layout_height="wrap_content"
12        android:layout_margin="10.0dip"
13        android:text="返回" />
14 
15</LinearLayout>

然后在代码中实现

01PreferenceHead ph = new PreferenceHead(this);
02ph.setOnBackButtonClickListener(new OnClickListener() {
03 
04    @Override
05    public void onClick(View v) {
06        finish();
07    }
08});
09ph.setOrder(0);
10preferenceScreen.addPreference(ph);

这样就完成了一个具有返回按钮的顶部布局的 PreferenceActivity,效果图如下

效果图效果图



转:http://my.oschina.net/eclipse88/blog/52316


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值