安卓自定义view(组合控件)

      从事安卓开发已经有几个年头了,之前都是去看大神写的代码,受益颇深,所以想着把自己这几年学的东西给大家分享一下,写的不好可以忽略,勿喷啊~~

    思考了好久,感觉还是从自定义控件开始写起吧,自定义控件自己总结无非就是三种,组合控件,继承现有控件,自己绘制,这三种,首先,我们从最简单的组合控件说起。组合控件顾名思义,就是将现有的一些控件组合起来,形成一个新的控件,话不多说,接下来看代码。

首先,自定义控件大多数时候需要自定义属性的,就是创建res/values/attrs.xml文件,代码如下:


其中name就是自定义属性的名称,format是类型,如String,float等

接下来就是使用了。

package com.example.dell.combinationview;

import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by gk on 2018/3/12.
 */

public class GroupView extends LinearLayout {
private View mView;
    private ImageView lefticon,righticon;
    private TextView left_tv,title,right_tv;
    private String lefttitle,righttitle,titlestr;
    private boolean isshowing;
    private int left,right;
    private Context mContext;

    public GroupView(Context context) {
        this(context,null);
    }

    public GroupView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public GroupView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext=context;
        TypedArray tarray=context.obtainStyledAttributes(attrs,R.styleable.GroupView);
        try {
            lefttitle=tarray.getString(R.styleable.GroupView_lefttitle);
            titlestr=tarray.getString(R.styleable.GroupView_title);
            righttitle=tarray.getString(R.styleable.GroupView_righttitle);
            left=tarray.getResourceId(R.styleable.GroupView_lefticon,0);
            right=tarray.getResourceId(R.styleable.GroupView_righticon,0);
            isshowing=tarray.getBoolean(R.styleable.GroupView_islefttitleshowing,true);//判断左边的文字是否显示
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            tarray.recycle();
        }


        findview(context);

    }

    private void findview(Context context) {
        mView= LayoutInflater.from(context).inflate(R.layout.groupviewlinearlayout,this);
        lefticon=mView.findViewById(R.id.lefticon);//左边图片
        righticon=mView.findViewById(R.id.right_icon);
        left_tv=mView.findViewById(R.id.lefttitle);
        right_tv=mView.findViewById(R.id.righttitle);
        title=mView.findViewById(R.id.title);
        if (isshowing){
            left_tv.setVisibility(VISIBLE);
        }else {
            left_tv.setVisibility(GONE);
        }
        left_tv.setText(lefttitle);
        right_tv.setText(righttitle);
        title.setText(titlestr);
        lefticon.setBackgroundResource(left);
        righticon.setBackgroundResource(right);

        righticon.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
               Toast.makeText(mContext,"下一页",Toast.LENGTH_SHORT).show();
            }
        });

        lefticon.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext,"返回",Toast.LENGTH_SHORT).show();
            }
        });
    }



}
上述就是自定义控件之组合控件的核心代码,其中包括了自定义属性,那么接下来就是使用了很简单,在MainActivity的xml中直接引用就可以,如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.dell.combinationview.MainActivity">

    <com.example.dell.combinationview.GroupView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:lefticon="@mipmap/backicon"
        app:righticon="@mipmap/nexticon"
        app:lefttitle="返回"
        app:righttitle="下一页"
        app:title="标题名称"
        app:islefttitleshowing="true"
       >

    </com.example.dell.combinationview.GroupView>

</android.support.constraint.ConstraintLayout>
最后运行结果如下图:


两边的按钮可以点击的哦~~今天就写到这里,下章会写到自定义View之继承现有的控件

如果对TypeArray不了解可以点击打开链接

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值