简单的自定义View

一、自定义View

因为Android系统内置的View无法实现我们需求,所以需要针对业务需求定制所需要的View,或者单种样式统一的布局出现在项目的多个地方,也可以把这个布局抽出来成自定义View。

经典头部标题栏

这种头部标题栏经常会在布局中出现,多次定义太麻烦,用include每次都需要单独控制每个控件,所以把它抽成自定义控件可以进行属性统一管理,比较方便。

二、具体操作

  1. 自定义一个类继承自FrameLayout,重写三个方法,注意:必须把前两个一个参数和两个参数方法的super换成this,不然在使用的时候自定义View不生效,并且在一个参数和两个参数的this的括号里分别增加个null 和 0;
  2. 在第三个方法中加载自定义View的布局
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.TitleBar);
        View inflate = View.inflate(context, R.layout.titlebar, null);
        addView(inflate);
  1. 在values文件下创建artts XML文件
    自定义属性分别为控制自定义View的背景、自定义View中TextView的颜色、字体大小、是否显示 和 点击监听
<resources>
    <declare-styleable name="TitleBar">
        <attr name="titleBackgroundColor" format="color|reference" />

        <attr name="tvLeftTextColor" format="color|reference" />

        <attr name="tvRightTextSize" format="integer|dimension" />

        <attr name="tvIsShowLeft" format="boolean" />
    </declare-styleable>
</resources>
  1. 在自定义的类里找控件和获取
       //找到控件
        TextView mLeftTv = (TextView) itemView.findViewById(R.id.tv_left);

        //获取使用中设置的参数,默认是false
        boolean showLeft = typedArray.getBoolean(R.styleable.TitleBar_tvIsShowLeft, false);
        //根据布局中设置的参数确定控件是现实还是隐藏
        mLeftTv.setVisibility(!showLeft ? VISIBLE : INVISIBLE);

        //获取传过来颜色,默认颜色
        int tvLeftColor = typedArray.getColor(R.styleable.TitleBar_tvLeftTextColor, R.color.ColorWther);
        //根据布局中设置的参数设置字体颜色
        mLeftTv.setTextColor(tvLeftColor);

        //获取传过来字体大小,默认字体大小(单位是px,源码中有px转dp和sp的操作)
        float tvLeftSize = typedArray.getDimension(R.styleable.TitleBar_tvLefttTextSize, 16);
        //根据布局中设置的参数设置字体大小
        mLeftTv.setTextSize(tvLeftSize);
  1. 控件的点击监听和RecycleView的接口回调一样;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容