android自定义组合控件步骤

1,首先用xml文件编写你想要要·的组合控件的样式(和正常一样写)。
2,创建一个类,让他继承相应的Layout(根据你xml中布局用的根布局,例如LinearLayout),实现两个参数的构造函数,
再在构造方法中获取到你xml文件中的各个分组件,便于后面对其进行属性修改,

private ImageView img;
private TextView tv;
public DefineView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.define_view,this,true);
img= (ImageView) findViewById(R.id.img);
tv= (TextView) findViewById(R.id.tv);
}

3.编写分组件的修改属性的方法,便于在activity中调用,设置属性

public void setImg(int res){
img.setImageResource(res);
}

public  void setText(String text){
tv.setText(text);
}

4,接着在activity对应的xml中 ,添加组件,方法和系统组件一样,组件名是报名加类名:

<com.me.testdemo.DefineView
android:id="@+id/defineview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

5,接着就可以在activity中在设置属性了

define_view= (DefineView) findViewById(R.id.defineview);
define_view.setImg(R.drawable.moive);
define_view.setText("测试一");

源码:

define_view.xml源码


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="120dp"
    android:orientation="vertical"
    android:gravity="center">
    <ImageView
        android:id="@+id/img"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/money" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="25sp"
        android:text="测试" />

LinearLayout>
DefineView.java 源码

package com.me.testdemo;

import android.content.Context;
import android.text.Layout;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
 * Created by zhouluping on 2016/7/14.
 */
public class DefineView extends LinearLayout{
    private ImageView img;
    private TextView tv;
    public DefineView(Context context) {
        super(context);
    }
    public DefineView(Context context, AttributeSet attrs) {
        super(context, attrs);   LayoutInflater.from(context).inflate(R.layout.define_view,this,true);
        img= (ImageView) findViewById(R.id.img);
        tv= (TextView) findViewById(R.id.tv);
    }

    public void setImg(int res){
        img.setImageResource(res);
    }
    public  void setText(String text){
        tv.setText(text);
    }
}
main_activity.xml源码


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.me.testdemo.MainActivity">

    <com.me.testdemo.DefineView
        android:id="@+id/defineview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
RelativeLayout>
MainActivty.java 源码

package com.me.testdemo;

import android.graphics.Color;
import android.os.Bundle;
import ChangeBarpackage.BaseActivity;

public class MainActivity extends BaseActivity{
    private DefineView define_view;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setStatusBarColor(Color.rgb(255,0,0));
        setContentView(R.layout.activity_main);
        define_view= (DefineView) findViewById(R.id.defineview);
        define_view.setImg(R.drawable.moive);
        define_view.setText("测试一");
    }
}

你可能感兴趣的:(心得)