Android:自定义组合控件

在Android程序开发中,控件是常用的东西,但有时候会发现现有的控件无法满足功能需求,所以就需要有自定义控件。
自定义控件一般有两种方式,一种是组合控件,一种是基于View类的自绘控件。组合控件顾名思义就是将现有的控件组合到一起,形成一个新控件。相比自绘控件,组合控件比较容易编写,但是还是受限于现有的控件,可以满足一些个性不是很强的控件需求。
现在我们就来讲讲组合控件:

  • 什么是组合控件
    个人理解所谓的组合控件就是把,现有的控件放一起,把几个控件的功能结合在一起,并且相互作用。
  • 什么时候使用组合控件
    个人认为,在某些控件组合会多次使用的时候可以把这些控件的组合编写成一个组合控件,可以提高编程的效率。
    例如,一些购物app的商品简介界面的商品信息的显示,一般会有ImageView,TextView,Button等基本控件。这些控件组合会重复的出现,所以就可以把这些控件组合成组合控件,以便高效的重复利用。
  • 实现组合控件
    这里简单实现一个带增加减少按钮的数字编辑框

    首先编辑布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
    android:layout_height="match_parent">
<ImageButton
    android:layout_width="30dp"
    android:layout_height="50dp"
    android:id="@+id/minus"
    android:src="@drawable/pull_left"
    android:background="#00000000"/>
    <EditText
        android:layout_width="75dp"
        android:layout_height="50dp"
        android:id="@+id/num"
        android:text="0"
        android:gravity="center"
        android:inputType="number"
        android:textSize="16sp"/>
    <ImageButton
        android:layout_width="30dp"
        android:layout_height="50dp"
        android:id="@+id/add"
        android:src="@drawable/pull_right"
        android:background="#00000000"
        />
</LinearLayout>

在布局文中,我添加了2个ImageButton和一个EditText,按钮用来增加或减少编辑框中数字的大小,编辑框用来显示数字或者直接修改数字

效果图

接下来创建一个NumberView类继承FrameLayout类

public class NumberView extends FrameLayout {
    private ImageButton minus;
    private ImageButton add;
    private EditText num;

    public NumView(Context context){
        super(context);
        minus=(ImageButton) findViewById(R.id.minus);
        add=(ImageButton) findViewById(R.id.add);
        num=(EditText)findViewById(R.id.num);
        minus.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                int n;
                n=Integer.parseInt(num.getText().toString());
                n--;
                num.setText(n+"");
            }
        });
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                int n;
                n=Integer.parseInt(num.getText().toString());
                n++;
                num.setText(n+"");
            }
        });
    }
    public int getnum(){
        return Integer.parseInt(num.getText().toString());
    }
    public void setnum(int a){ this.num.setText(a+"");}
    public TextView getnumtext(){
        return num;
    }
}

在Java代码中进行对布局文件的绑定,并绑定控件,对控件进行设置或者绑定监听器等操作。

定义好组合控件后,接下来需要进行对其的引用

在资源文件可以直接想普通控件一样,进行引用

<com.example.administrator.helper.NumView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="60dp"
            android:id="@+id/cnum">

输入完整的类明既可以引用

在Java代码中也和普通的控件一样进行操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值