Android自定义控件的设计流程

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;

				}
			}
		});
	}
}







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值