1.在strings.xml文件中,添加自定义声明属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, SplashActivity!</string>
<string name="app_name">Mobilesafe</string>
<declare-styleable name="my_setting">
<attr name="content" format="string"></attr>
<attr name="title" format="string"></attr>
</declare-styleable>
</resources>
2.在自定义布局文件my_view.xml中,引用该申明属性
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:woo="http://schemas.android.com/apk/res/com.woo.mobilesafe"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/tv_myview_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="3dip"
android:layout_marginTop="2dip"
android:text="设置的标题"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/tv_myview_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_myview_title"
android:layout_marginLeft="3dip"
android:layout_marginTop="2dip"
android:text="设置的具体内容" />
<CheckBox
android:id="@+id/cb_myview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:clickable="false"
android:focusable="false" />
</RelativeLayout>
3.在相对布局的.java文件中编辑属性
package com.woo.mobilesafe.ui;
import com.woo.mobilesafe.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class SettingView extends RelativeLayout {
private TextView tv_title;
private TextView tv_content;
private CheckBox cBox;
public SettingView(Context context) {
super(context);
//挂载布局文件到 当前SettingView中
View view=View.inflate(context, R.layout.my_view, this);
tv_content=(TextView) view.findViewById(R.id.tv_myview_content);
tv_title=(TextView) view.findViewById(R.id.tv_myview_title);
cBox=(CheckBox) view.findViewById(R.id.cb_myview);
}
public SettingView(Context context, AttributeSet attrs) {
super(context, attrs);
View view=View.inflate(context, R.layout.my_view, this);
tv_content=(TextView) view.findViewById(R.id.tv_myview_content);
tv_title=(TextView) view.findViewById(R.id.tv_myview_title);
cBox=(CheckBox) view.findViewById(R.id.cb_myview);
//获取my_setting.xml解析的数据
TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.my_setting);
String content=a.getString(0);
String title=a.getString(1);
tv_content.setText(content);
tv_title.setText(title);
a.recycle();
}
public boolean isChecked(){
return cBox.isChecked();
}
public void setTitle(String text){
tv_title.setText(text);
}
public void setContent(String text){
tv_content.setText(text);
}
}
4.在布局文件setting.xml中应用自定义的控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:itheima="http://schemas.android.com/apk/res/com.woo.mobilesafe"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:background="#ff6cbd45" >
<TextView
android:id="@+id/tv_main_title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="设 置 中 心"
android:textColor="#ffffff"
android:textSize="18.0dip" />
</LinearLayout>
<cn.itcast.mobilesafe.ui.SettingView
android:id="@+id/sv_autoupdate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
itheima:content="自动更新没有开启"
itheima:title="自动更新设置" >
</cn.itcast.mobilesafe.ui.SettingView>
</LinearLayout>
5.在SettingActivity中调用setting.xml的布局
package com.woo.mobilesafe;
import android.app.Activity;
import android.os.Bundle;
public class SettingActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//引入setting的布局
setContentView(R.layout.setting);
}
}
6.在清单文件中配置activity.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.woo.mobilesafe"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<application
android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.woo.mobilesafe.SplashActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainTabActivity"></activity>
<activity android:name=".SettingActivity"></activity>
</application>
</manifest>
7.在主页面中设置onclick事件
package com.woo.mobilesafe;
import com.woo.mobilesafe.adapter.MainTabAdapter;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
public class MainTabActivity extends Activity {
private GridView gv_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gv_main=(GridView) findViewById(R.id.gv_main);
//设计数据适配器, gridview数据绑定。
gv_main.setAdapter(new MainTabAdapter(this));
//图片项目点击事件
gv_main.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
switch (position) {
case 8:
Intent intent= new Intent(MainTabActivity.this,SettingActivity.class);
startActivity(intent);
break;
}
}
});
}
}