本文共 5673 字,大约阅读时间需要 18 分钟。
随着插件化/组件化的快速发展,现在大部分的项目开发中都会提取公共的代码制作成 Library module,根据具体的业务需求进行拆分。小菜也学习一下如何拆分 lib 包,实际操作很简单,整理一下操作步骤。
(1) 在当前 Project 下,File -> New Module,选择 Android Library,进行下一步;
(2) 设置具体的 Library/Module/Package 等名称,注意:Module 名称与 Library 相匹配默认为小写,需要的话手动调整,进行下一步;
(3) 此时在当前 Project 中就已经创建好 Library;
(4) 在当前 Project 的 settings.gradle 中就会自动生成创建的 Module;
Tips: :myview 中的 : 代表的与 app 同级目录下的 Module。
小菜在新建的 Library 中添加一个自定义按钮,可以添加配置图标和文字以及背景样式。因为只是为了测试 Library Module,所以功能很简单,实现方式也很简单,只是几个基本控件的组合。小菜只是简单的整理一下。
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。
小菜也是初步尝试,有不对的地方烦请提醒。以下是小菜公众号,欢迎闲来吐槽~
转载地址:http://vrfzo.baihongyu.com/