自定义首选项_添加顶部布局(返回按钮)

Elyar的Android笔记(九):自定义首选项

在项目中会大量用到首选项,大多数情况下系统提供的元素不能满足我们的需求。根据App的具体情况,需要添加自己的布局。

好了,废话少说。

首先借鉴一下Lyndon1115前辈提供的资料对Preference家庭元素有点认识:

Preference布局结构和View的布局结构本质上还是大同小异,Preference的优点在于布局界面的可控性和高效率以及可存储值的简洁性(每个PreferenPreferencece存储在相对应下的SharedPreference文件夹下)。 下面,我们对比Preference和View下得各个子控件,对他们的家庭元素在宏观上有个更好的把握性。

单一控件:

                 Preference 控件家庭                         View控件家庭                      控件含义


                                                                                                Preference                                                            TextView                                      文本框

                                                                                              CheckPreference                                                  CheckBox                                     单选框

                                                                                              EditTextPreference                                                  EditText                                       输入文本框

                                                                                               ListPreference                                                         ListView                                      列表框

                                                                                             RingtonePreference                                                   ——                                             铃声

组合控件:


                                                                                       PreferenceCategory :类似于LinearLayou、RelativeLayout,用于组合一组Preference,使布局更具备层次感 。

                                                                                       PreferenceScreen : 所有Preference元素的根节点。


===================================================================================================================================



来个Demo进一步学习:

(一):在工程MyPreferenceDemo / res 中 创建xml 文件夹,并在其中创建mypreference.xml,注意:创建时 Resource Type 为:Preference 类型而不是 Layout类型
      (1)mypreference.xml的内容:

<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="aaaaa" >

    <PreferenceCategory android:key="add_head" />
    <PreferenceCategory
        android:key="set_local"
        android:title="我的位置" >
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="apply_wifi"
            android:summary="使用无线网络在应用程序(例如Google地图)中查看位置"
            android:title="使用无线网络" >
        </CheckBoxPreference>
        <CheckBoxPreference
            android:key="apply_gps"
            android:summary="定位到街道级别(需要消耗更多的电量以及天气允许)"
            android:title="使用GPS" >
        </CheckBoxPreference>
    </PreferenceCategory>
    <PreferenceCategory android:title="无线和网络设置" >
        <CheckBoxPreference
            android:key="apply_fly"
            android:summary="禁用所有无线连接"
            android:title="飞行模式" >
        </CheckBoxPreference>
        <CheckBoxPreference
            android:key="apply_internet"
            android:summary="禁用通过USB共享Internet连接"
            android:title="Internet共享" >
        </CheckBoxPreference>
        <CheckBoxPreference
            android:key="apply_wifi"
            android:summary="打开Wi-Fi"
            android:title="Wi-Fi" >
        </CheckBoxPreference>

        <Preference
            android:dependency="apply_wifi"
            android:key="wifi_setting"
            android:summary="设置和管理无线接入点"
            android:title="Wi-Fi设置" >
        </Preference>

        <CheckBoxPreference
            android:key="apply_bluetooth"
            android:summary="启用蓝牙"
            android:title="蓝牙" >
        </CheckBoxPreference>

        <Preference
            android:dependency="apply_bluetooth"
            android:key="bluetooth_setting"
            android:summary="管理连接、设备设备名称和可检测性"
            android:title="蓝牙设置" >
        </Preference>

        <EditTextPreference
            android:key="number_edit"
            android:title="输入电话号码" >
        </EditTextPreference>

        <ListPreference
            android:dialogTitle="选择部门"
            android:entries="@array/department"
            android:entryValues="@array/department_value"
            android:key="depart_value"
            android:title="部门设置" >
        </ListPreference>

        <RingtonePreference
            android:key="ring_key"
            android:ringtoneType="all"
            android:showDefault="true"
            android:showSilent="true"
            android:title="铃声" >
        </RingtonePreference>
    </PreferenceCategory>

</PreferenceScreen>


 
(2)mypreference.xml 中用到的资源文件MyPreferenceDemo / res / values / array

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

    <string-array name="department">
        <item>综合部</item>
        <item>外贸部</item>
        <item>行政部</item>
    </string-array>
    <string-array name="department_value">
        <item>001</item>
        <item>002</item>
        <item>003</item>
    </string-array>

</resources>


(二):定义菜单样式:在java代码中创建

package com.example.mp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {
	public static final int SET = Menu.FIRST;
	public static final int EXIT = Menu.FIRST + 1;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	// 创建Menu菜单
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, SET, 0, "设置");
		menu.add(0, EXIT, 0, "退出");
		return super.onCreateOptionsMenu(menu);
	}

	// 点击Menu菜单选项响应事件
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 1:
			Intent mIntent = new Intent();
			mIntent.setClass(this, Myprefrence.class);
			startActivity(mIntent);
			break;
		case 2:
			finish();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

}
效果:

(三)在java代码中关联myprefrence

package com.example.mp;

import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Myprefrence extends PreferenceActivity implements OnClickListener {
	private PreferenceCategory screen;
	private Preference parent;
	private MyHeader header;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		<span style="color:#FF0000;">addPreferencesFromResource(R.xml.myprefrence);<span style="color:#000000;">//通过此方法关联</span>
</span>                
                //以下内容暂时不用
	        //screen = (PreferenceCategory) findPreference("add_head");
		//header = new MyHeader(Myprefrence.this);
		//header.setHeaderListenner(this);
		//screen.addPreference(header);
	}
}
效果:


今天的内容:

(四)在设置页面顶部添加我们自己的布局(自定义):
MyPreferenceDemo / res / layout / myheader.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Return"
        android:textSize="18sp" />

</LinearLayout>

自定义内容可以根据实际情况进行布局,为了体现出效果我就加了一个Button(相当难看,凑合着看看吧);


关键:

自定义一个Preference(这就是我们今天讲的自定义部分)

package com.example.mp;

import android.content.Context;
import android.preference.Preference;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MyHeader extends Preference {

	public OnClickListener headerListener;

	public MyHeader(Context context) {
		super(context);
		setLayoutResource(R.layout.myheader);<span style="color:#FF0000;">//关联自定义的布局</span>
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void onBindView(View view) {
		// TODO Auto-generated method stub
		super.onBindView(view);

		Button button = (Button) view.findViewById(R.id.btn);
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (headerListener != null) {
					headerListener.onClick(v);
				}
			}
		});
	}

	public void setHeaderListenner(OnClickListener onClickListener) {
		this.headerListener = onClickListener;
	}

}

(五)引用自定义内容

在第三步中暂时不需要的内容现在起到关键作用了(将自定义的内容添加到设置页面);

......
                //以下内容暂时不用
	        //screen = (PreferenceCategory) findPreference("add_head");
		//header = new MyHeader(Myprefrence.this);
		//header.setHeaderListenner(this);
		//screen.addPreference(header);
.......
效果:


好了完成了,不要评论效果,我不是UI设计师,

我的搭档Diylar会给我解决效果问题。


总结一下:也就呢么几步,为了简单易懂,功能写的超级简单了。就是四到五完成工作。

第四步:自定义

第五步:添加。



小生就写到这,如有不符之处,请大牛们指导。


转载请注明出处:http://blog.csdn.net/u012418084











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值