欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android創(chuàng)建外部lib庫及自定義View的圖文教程

 更新時間:2018年11月15日 11:31:03   作者:阿策神奇  
這篇文章主要給大家介紹了關(guān)于Android創(chuàng)建外部lib庫及自定義View的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

隨著插件化/組件化的快速發(fā)展,現(xiàn)在大部分的項目開發(fā)中都會提取公共的代碼制作成 Library module,根據(jù)具體的業(yè)務(wù)需求進行拆分。小菜也學習一下如何拆分 lib 包,實際操作很簡單,整理一下操作步驟。

拆分創(chuàng)建 Library

在當前 Project 下,F(xiàn)ile -> New Module,選擇 Android Library,進行下一步;

設(shè)置具體的 Library/Module/Package 等名稱,注意:Module 名稱與 Library 相匹配默認為小寫,需要的話手動調(diào)整,進行下一步;

此時在當前 Project 中就已經(jīng)創(chuàng)建好 Library;

在當前 Project 的 settings.gradle 中就會自動生成創(chuàng)建的 Module;

Tips: :myview 中的 : 代表的與 app 同級目錄下的 Module。


在當前 app 的 build.gradle 中 dependencies{} 中添加 implementation project(':myview') 即可正常接入。

自定義 View

小菜在新建的 Library 中添加一個自定義按鈕,可以添加配置圖標和文字以及背景樣式。因為只是為了測試 Library Module,所以功能很簡單,實現(xiàn)方式也很簡單,只是幾個基本控件的組合。小菜只是簡單的整理一下。

1、新建一個 MyView 繼承自 RelativeLayout,實現(xiàn)基本的構(gòu)造方法;

2、在構(gòu)造方法中實現(xiàn)對布局的添加,控件的綁定以及一些基本的 setXX 方法;

3、至此 MyView 就可以應(yīng)用,但所有但屬性都需要通過 setXX 方法來設(shè)置;這當然是不合理的,于是小菜新建一個 attrs 文件,在資源文件中設(shè)置基本的樣式,并在 MyView 的 obtainAttributes 方法中逐一綁定即可;

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<declare-styleable name="my_view" tools:ignore="MissingDefaultResource">
<!-- 中間文字顏色 -->
<attr name="tv_color" format="color" />
<!-- 中間文字顯隱性 -->
<attr name="tv_show" format="boolean" />
<!-- 中間文字內(nèi)容 -->
<attr name="tv_str" format="string" />
<!-- 中間文字大小 -->
<attr name="tv_size" format="float" />
<!-- 右側(cè)文字顏色 -->
<attr name="right_tv_color" format="color" />
<!-- 右側(cè)文字顯隱性 -->
<attr name="right_tv_show" format="boolean" />
<!-- 右側(cè)文字內(nèi)容 -->
<attr name="right_tv_str" format="string" />
<!-- 右側(cè)文字大小 -->
<attr name="right_tv_size" format="float" />
<!-- 整體背景顏色 -->
<attr name="bg_color" format="color" />
<!-- 整體邊框顏色 -->
<attr name="strok_color" format="color" />
<!-- 整體邊框圓角 -->
<attr name="bg_radius" format="float" />
<!-- 中間圖片顯隱性 -->
<attr name="iv_show" format="boolean" />
<!-- 中間圖片資源 -->
<attr name="iv_src" format="reference" />
</declare-styleable>
</resources>

4、至此,MyView 自定義按鈕以及完成,在 app 中也是正常調(diào)用即可。

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。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Android事件分發(fā)機制深入刨析原理及源碼

    Android事件分發(fā)機制深入刨析原理及源碼

    Android?的事件分發(fā)機制大體可以分為三部分:事件生產(chǎn)、事件分發(fā)?、事件消費。事件的生產(chǎn)是由用戶點擊屏幕產(chǎn)生,我們這次著重分析事件的分發(fā)和消費,因為事件分發(fā)和處理聯(lián)系的過于緊密,這篇文章將把事件的分發(fā)和消費放在一起分析
    2023-04-04
  • Android中PopupMenu組件的使用實例

    Android中PopupMenu組件的使用實例

    本篇文章主要介紹了Android中PopupMenu組件的使用實例,詳細的介紹了PopupMenu組件的使用,具體一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • android studio集成極光推送的操作步驟

    android studio集成極光推送的操作步驟

    這篇文章主要介紹了android studio集成極光推送的操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • android Matrix實現(xiàn)圖片隨意放大縮小或拖動

    android Matrix實現(xiàn)圖片隨意放大縮小或拖動

    這篇文章主要為大家詳細介紹了android Matrix實現(xiàn)圖片隨意放大縮小或拖動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android studio 混淆+打包+驗證是否成功

    Android studio 混淆+打包+驗證是否成功

    本文主要介紹了Android studio 混淆+打包+驗證是否成功的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Android仿活動時分秒倒計時效果

    Android仿活動時分秒倒計時效果

    這篇文章主要為大家詳細介紹了Android仿活動時分秒倒計時效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Android UI:ListView - SimpleAdapter實例詳解

    Android UI:ListView - SimpleAdapter實例詳解

    這篇文章主要介紹了Android UI:ListView - SimpleAdapter實例詳解,SimpleAdapter是擴展性最好的適配器,可以定義各種你想要的布局,而且使用很方便,需要的朋友可以參考下
    2016-11-11
  • Android 橫豎屏處理的知識小結(jié)

    Android 橫豎屏處理的知識小結(jié)

    這篇文章主要介紹了Android 橫豎屏處理的知識小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Android使用Service實現(xiàn)簡單音樂播放實例

    Android使用Service實現(xiàn)簡單音樂播放實例

    這篇文章主要為大家詳細介紹了Android使用Service實現(xiàn)簡單音樂播放實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android AES加密工具類分享

    Android AES加密工具類分享

    這篇文章主要介紹了Android AES加密工具類分享,本文給出了實現(xiàn)代碼和使用例子,本文使用PKCS5Padding加密方式實現(xiàn),需要的朋友可以參考下
    2014-10-10

最新評論