安卓学习(三) 制作一个简单的自定义控件

1、制作一个控件的xml样式。这里我们要做出一个标题控件,包含三个基础控件,两个button,一个TextView,第一个button在最左端,TextView在中间,另一个button在右边。大致功能“返回(退出)--标题内容---编辑(或其他)”。XML如下:(title.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
android:layout_width="match_parent" android:layout_height="match_parent">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:
    android:gravity="center"
    android:text="Back"/>

<TextView
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:
    android:text="标题"
    android:gravity="center"
    android:layout_weight="1"/>

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:
    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>

  简单的控件自定义方式已经实现了,以后可以根据实际情况制定更复杂的控件。