【移動應(yīng)用開發(fā)技術(shù)】Android如何創(chuàng)建外部lib庫及自定義View_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何創(chuàng)建外部lib庫及自定義View_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何創(chuàng)建外部lib庫及自定義View_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何創(chuàng)建外部lib庫及自定義View_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何創(chuàng)建外部lib庫及自定義View_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論