从事安卓开发已经有几个年头了,之前都是去看大神写的代码,受益颇深,所以想着把自己这几年学的东西给大家分享一下,写的不好可以忽略,勿喷啊~~
思考了好久,感觉还是从自定义控件开始写起吧,自定义控件自己总结无非就是三种,组合控件,继承现有控件,自己绘制,这三种,首先,我们从最简单的组合控件说起。组合控件顾名思义,就是将现有的一些控件组合起来,形成一个新的控件,话不多说,接下来看代码。
首先,自定义控件大多数时候需要自定义属性的,就是创建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不了解可以点击打开链接