Android自定义控件

Android自定义控件

Tags: Android

摘要

Android自定义控件

自定义控件

静态加载直接使用 <include layout="@layout/title" />
动态加载就要通过代码方式,这样方便事件控制.实际项目中这种肯定更多.
layout中的使用就是直接使用package的方式引用.

   <net.javablog.test34_customcontrol.TitleLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></net.javablog.test34_customcontrol.TitleLayout>

定义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:background="@drawable/title_bg">

    <Button
        android:id="@+id/title_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dip"
        android:background="@drawable/back_bg"
        android:text="Back"
        android:textColor="#fff" />

    <TextView
        android:id="@+id/title_text"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Title Text"
        android:textColor="#fff"
        android:textSize="24sp" />

    <Button
        android:id="@+id/title_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dip"
        android:background="@drawable/edit_bg"
        android:text="Edit"
        android:textColor="#fff" />


</LinearLayout>

对应的java代码

package net.javablog.test34_customcontrol;

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;

public class TitleLayout extends LinearLayout {
    public TitleLayout(Context context, AttributeSet attrs) {
        super(context);
        LayoutInflater.from(context).inflate(R.layout.title, this);


        Button titleBack = (Button) findViewById(R.id.title_back);
        Button titleEdit = (Button) findViewById(R.id.title_edit);


        titleBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //当点击返回按钮时销毁掉当前的活动
                ((Activity) getContext()).finish();
            }
        });

        titleEdit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "You clicked Edit button",
                        Toast.LENGTH_SHORT).show();
            }
        });

    }
}

mainlayout中引用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/back_bg"
    android:orientation="horizontal"
    tools:context="net.javablog.test34_customcontrol.MainActivity">

    <!--<include layout="@layout/title" />-->
    <net.javablog.test34_customcontrol.TitleLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></net.javablog.test34_customcontrol.TitleLayout>


</LinearLayout>

最终效果

code

https://coding.net/u/javacore/p/android-study/git/tree/master/test3.4_customcontrol