版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android如何創(chuàng)建外部lib庫及自定義View
在下給大家分享一下Android如何創(chuàng)建外部lib庫及自定義View,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!拆分創(chuàng)建Library在當(dāng)前Project下,F(xiàn)ile->NewModule,選擇AndroidLibrary,進(jìn)行下一步;設(shè)置具體的Library/Module/Package等名稱,注意:Module名稱與Library相匹配默認(rèn)為小寫,需要的話手動調(diào)整,進(jìn)行下一步;此時(shí)在當(dāng)前Project中就已經(jīng)創(chuàng)建好Library;在當(dāng)前Project的settings.gradle中就會自動生成創(chuàng)建的Module;Tips::myview中的:代表的與app同級目錄下的Module。在當(dāng)前app的build.gradle中dependencies{}中添加implementationproject(':myview')即可正常接入。自定義View小菜在新建的Library中添加一個(gè)自定義按鈕,可以添加配置圖標(biāo)和文字以及背景樣式。因?yàn)橹皇菫榱藴y試LibraryModule,所以功能很簡單,實(shí)現(xiàn)方式也很簡單,只是幾個(gè)基本控件的組合。小菜只是簡單的整理一下。1、新建一個(gè)MyView繼承自RelativeLayout,實(shí)現(xiàn)基本的構(gòu)造方法;2、在構(gòu)造方法中實(shí)現(xiàn)對布局的添加,控件的綁定以及一些基本的setXX方法;3、至此MyView就可以應(yīng)用,但所有但屬性都需要通過setXX方法來設(shè)置;這當(dāng)然是不合理的,于是小菜新建一個(gè)attrs文件,在資源文件中設(shè)置基本的樣式,并在MyView的obtainAttributes方法中逐一綁定即可;<?xml
version="1.0"
encoding="utf-8"?>
<resources
xmlns:android="/apk/res/android"
xmlns:tools="/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.setBack
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年夏季食品供應(yīng)與配送合同
- 《馮夢龍文藝思想研究》
- 《髕骨張力板固定系統(tǒng)的有限元分析》
- 《英式橄欖球項(xiàng)目制勝規(guī)律的訓(xùn)練學(xué)研究》
- 《不同成績選手華爾茲舞雙左疾轉(zhuǎn)動作運(yùn)動學(xué)參數(shù)對比分析》
- 第02講物質(zhì)的量濃度-2025年高考化學(xué)卓越講義
- 2024年戶外廣告項(xiàng)目合作合同
- 2024年河北全國客運(yùn)資格證模擬考試
- 2024年江西客運(yùn)上崗證多少分算合格
- 專題04冪函數(shù)指數(shù)函數(shù)與對數(shù)函數(shù)(練習(xí))(原卷版)
- 水工巖石分級及圍巖分類
- 基因擴(kuò)增實(shí)驗(yàn)室常用儀器使用課件
- 2023年?duì)I養(yǎng)師、營養(yǎng)指導(dǎo)員專業(yè)技能及理論知識考試題庫(附含答案)
- 斜井敷設(shè)電纜措施
- 施工機(jī)械設(shè)備租賃實(shí)施方案
- 牙膏產(chǎn)品知識課件
- 液化氣站人員勞動合同范本
- 第一章 教育政策學(xué)概述
- 常見土源性寄生蟲演示文稿
- 全員育人導(dǎo)師制學(xué)生談話記錄
- 了解學(xué)前兒童科學(xué)領(lǐng)域核心經(jīng)驗(yàn)
評論
0/150
提交評論