博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 图解创建外部 lib 库及自定义 View
阅读量:6454 次
发布时间:2019-06-23

本文共 5673 字,大约阅读时间需要 18 分钟。

      随着插件化/组件化的快速发展,现在大部分的项目开发中都会提取公共的代码制作成 Library module,根据具体的业务需求进行拆分。小菜也学习一下如何拆分 lib 包,实际操作很简单,整理一下操作步骤。

拆分创建 Library

(1) 在当前 Project 下,File -> New Module,选择 Android Library,进行下一步;

(2) 设置具体的 Library/Module/Package 等名称,注意:Module 名称与 Library 相匹配默认为小写,需要的话手动调整,进行下一步;

(3) 此时在当前 Project 中就已经创建好 Library

(4) 在当前 Projectsettings.gradle 中就会自动生成创建的 Module

Tips: :myview 中的 : 代表的与 app 同级目录下的 Module

  1. 在当前 appbuild.gradledependencies{} 中添加 implementation project(':myview') 即可正常接入。

自定义 View

      小菜在新建的 Library 中添加一个自定义按钮,可以添加配置图标和文字以及背景样式。因为只是为了测试 Library Module,所以功能很简单,实现方式也很简单,只是几个基本控件的组合。小菜只是简单的整理一下。

  1. 新建一个 MyView 继承自 RelativeLayout,实现基本的构造方法;
  2. 在构造方法中实现对布局的添加,控件的绑定以及一些基本的 setXX 方法;
  3. 至此 MyView 就可以应用,但所有但属性都需要通过 setXX 方法来设置;这当然是不合理的,于是小菜新建一个 attrs 文件,在资源文件中设置基本的样式,并在 MyViewobtainAttributes 方法中逐一绑定即可;
  1. 至此,MyView 自定义按钮以及完成,在 app 中也是正常调用即可。
public class MyView extends RelativeLayout {    private Context mContext;    private RelativeLayout mRlay;    private ImageView mIv;    private TextView mTv, mRightTv;    GradientDrawable drawable = new GradientDrawable();    int mTvColor, mRightTvColor, mRlayBgColor, mStrokeColor, mIvSrc;    boolean isTvShow, isRightTvShow, isIvShow;    float mTvSize, mRightTvSize, mRadiusSize;    String mTvStr, mRightTvStr;    public MyView(Context context) {        super(context);        mContext = context;        initView();    }    public MyView(Context context, AttributeSet attrs) {        super(context, attrs);        mContext = context;        initView();        obtainAttributes(context,attrs);    }    private void initView() {        LayoutInflater.from(mContext).inflate(R.layout.my_view_btn, this,true);        mRlay = findViewById(R.id.my_view_rly);        mIv = findViewById(R.id.my_view_iv);        mTv = findViewById(R.id.my_view_tv);        mRightTv = findViewById(R.id.my_view_rtv);    }    private void obtainAttributes(Context context, AttributeSet attrs) {        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.my_view);        mTvColor = ta.getColor(R.styleable.my_view_tv_color, Color.BLACK);        mTv.setTextColor(mTvColor);        mRightTvColor = ta.getColor(R.styleable.my_view_right_tv_color, Color.BLACK);        mRightTv.setTextColor(mRightTvColor);        mRlayBgColor = ta.getColor(R.styleable.my_view_bg_color, Color.WHITE);        mRlay.setBackgroundColor(mRlayBgColor);        mStrokeColor = ta.getColor(R.styleable.my_view_strok_color, Color.BLACK);        isIvShow = ta.getBoolean(R.styleable.my_view_iv_show, true);        mIv.setVisibility(isIvShow?View.VISIBLE:View.GONE);        isRightTvShow = ta.getBoolean(R.styleable.my_view_right_tv_show, true);        mRightTv.setVisibility(isRightTvShow?View.VISIBLE:View.GONE);        isTvShow = ta.getBoolean(R.styleable.my_view_tv_show, true);        mTv.setVisibility(isTvShow?View.VISIBLE:View.GONE);        mTvSize = ta.getFloat(R.styleable.my_view_tv_size, 16.0f);        mTv.setTextSize(mTvSize);        mRightTvSize = ta.getFloat(R.styleable.my_view_right_tv_size, 14.0f);        mRightTv.setTextSize(mRightTvSize);        mRadiusSize = ta.getFloat(R.styleable.my_view_bg_color, 80.0f);        drawable = (GradientDrawable) getResources().getDrawable(R.drawable.user_login_corner_qq);        drawable.setCornerRadius(mRadiusSize);        drawable.setStroke(1, mStrokeColor);        drawable.setColor(mRlayBgColor);        mRlay.setBackground(drawable);        mTvStr = ta.getString(R.styleable.my_view_tv_str);        mTv.setText(mTvStr);        mRightTvStr = ta.getString(R.styleable.my_view_right_tv_str);        mRightTv.setText(mRightTvStr);        mIvSrc = ta.getResourceId(R.styleable.my_view_iv_src, R.mipmap.user_login_icon_qq);        mIv.setImageResource(mIvSrc);        ta.recycle();    }    public void setMyViewTv(String textStr) {        mTv.setText(textStr);    }    public void setMyViewTvColor(int color) {        mTv.setTextColor(color);    }    public void setMyViewTvSize(float size) {        mTv.setTextSize(size);    }    public void isMyViewTvShow(boolean state) {        mTv.setVisibility(state ? View.VISIBLE : View.GONE);    }    public void setMyViewIv(Drawable drawable) {        mIv.setImageDrawable(drawable);    }    public void isMyViewIvShow(boolean state) {        mIv.setVisibility(state ? View.VISIBLE : View.GONE);    }    public void isMyViewRightTvShow(boolean state) {        mRightTv.setVisibility(state ? View.VISIBLE : View.GONE);    }    public void setMyViewRightTvText(String textStr) {        mRightTv.setText(textStr);    }    public void setMyViewRightTvSize(float size) {        mRightTv.setTextSize(size);    }    public void setMyViewRightTvColor(int color) {        mRightTv.setTextColor(color);    }    public void setMyViewBgColor(int color) {        drawable.setColor(color);        mRlay.setBackground(drawable);    }    public void setMyViewBgRadius(float radius) {        drawable.setCornerRadius(radius);        mRlay.setBackground(drawable);    }    public void setMyViewBgStrokeColor(int color) {        drawable.setStroke(1, color);        mRlay.setBackground(drawable);    }    public void setMyViewBgDrawable(Drawable drawable) {        mRlay.setBackground(drawable);    }}

      Tips: attrs.xml 中如果需要用到资源文件,可以使用 format="reference",代表某一个资源ID。


      小菜也是初步尝试,有不对的地方烦请提醒。以下是小菜公众号,欢迎闲来吐槽~

公众号.jpg

转载地址:http://vrfzo.baihongyu.com/

你可能感兴趣的文章
解析查询 queryString 请求参数的函数
查看>>
学生选课系统数据存文件
查看>>
4.6 直接插入排序法
查看>>
我的毕设总结所用的技术和只是要点 基于stm32F4的AGV嵌入式控制系统的设计
查看>>
盘点国内外那些有野心的BI公司
查看>>
JMeter—断言
查看>>
C++的新类创建:继承与组合
查看>>
m5-第9周作业
查看>>
odoo 权限设置
查看>>
asp操作access提示“无法从指定的数据表中删除”
查看>>
git bash 风格调整
查看>>
997D Cycles in product
查看>>
bzoj4589 Hard Nim
查看>>
java实现pdf旋转_基于Java实现PDF文本旋转倾斜
查看>>
java二维数组内存模型_C++二级指针第二种内存模型(二维数组)
查看>>
java static import 与 import_Java中的import和static import语句之间有什么区别?
查看>>
python time库3.8_python3中datetime库,time库以及pandas中的时间函数区别与详解
查看>>
java 代替Python_Java总是“沉沉浮浮”,替代者会是Python?
查看>>
贪吃蛇java程序简化版_JAVA简版贪吃蛇
查看>>
poi java web_WebPOI JavaWeb 项目 导出excel表格(.xls) Develop 238万源代码下载- www.pudn.com...
查看>>