制作一个简单的自定义控件
1、制作一个控件的xml样式。这里我们要做出一个标题控件,包含三个基础控件,两个button,一个TextView,第一个button在最左端,TextView在中间,另一个button在右边。大致功能“返回(退出)--标题内容---编辑(或其他)”。XML如下:(title.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="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnBac"
android:gravity="center"
android:text="Back"/>
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:id="@+id/text"
android:text="标题"
android:gravity="center"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/btnEdit"
android:text="Edit"/>
</LinearLayout>
2、编写控件的逻辑代码,新建.java文件,进行针对title.xml中LinearLayout布局的重写,并添加控件功能代码。(TitleLayout.java)
通过构造函数实现TitleLayout控件的样式加载,关联title.xml,并给布局中的两个button赋予逻辑。
package com.example.dingshuo.uitest;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
/**
* Created by DINGSHUO on 2015/6/8.
*/
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);
Button btnBack=(Button)findViewById(R.id.btnBac);
Button btnEdit=(Button)findViewById(R.id.btnEdit);
btnBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) getContext()).finish();
}
});
btnEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"你点击了Edit按钮",Toast.LENGTH_SHORT).show();
}
});
}
}
3、使用自定义控件。在MainActivity.xml中加入如下代码:
<!-- 添加自定义控件-->
<com.example.dingshuo.uitest.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"></com.example.dingshuo.uitest.TitleLayout>
简单的控件自定义方式已经实现了,以后可以根据实际情况制定更复杂的控件。