【移動應(yīng)用開發(fā)技術(shù)】Android中怎么使用ButtomDialog自定義底部彈出框_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么使用ButtomDialog自定義底部彈出框_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么使用ButtomDialog自定義底部彈出框_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么使用ButtomDialog自定義底部彈出框_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android中怎么使用ButtomDialog自定義底部彈出框_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】Android中怎么使用ButtomDialog自定義底部彈出框

今天就跟大家聊聊有關(guān)Android中怎么使用ButtomDialog自定義底部彈出框,可能很多人都不太了解,為了讓大家更加了解,在下給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。一、先來配置自定義控件需要的資源1.在res文件夾下創(chuàng)建一個anim文件夾并創(chuàng)建兩個slide_in_bottom.xml、slide_out_bottom.xml文件,負(fù)責(zé)彈框進(jìn)出動畫。<?xml

version="1.0"

encoding="utf-8"?>

<set

xmlns:android="/apk/res/android"

android:shareInterpolator="false">

<!--

slide_in_bottom.xml

-->

<translate

android:duration="@integer/dp_300"

android:fromXDelta="0%"

android:toXDelta="0%"

android:fromYDelta="100%"

android:toYDelta="0%"/>

</set><?xml

version="1.0"

encoding="utf-8"?>

<set

xmlns:android="/apk/res/android"

android:shareInterpolator="false">

<!--

slide_out_bottom.xml

-->

<translate

android:duration="@integer/dp_300"

android:fromXDelta="0%"

android:toXDelta="0%"

android:fromYDelta="0%"

android:toYDelta="100%"/>

</set>2.在style.xml添加陰影和動畫樣式。

<style

name="Theme.Light.NoTitle.Dialog"

parent="@android:style/Theme.Dialog">

<item

name="android:windowBackground">@android:color/transparent</item>

<item

name="android:windowNoTitle">true</item>

<item

name="android:windowIsFloating">true</item>

<item

name="android:windowFrame">@null</item>

</style>

<style

name="Theme.Light.NoTitle.NoShadow.Dialog"

parent="Theme.Light.NoTitle.Dialog">

<item

name="android:backgroundDimEnabled">false</item>

</style>

<style

name="Animation.Bottom.Rising"

parent="@android:style/Animation">

<item

name="android:windowEnterAnimation">@anim/slide_in_bottom</item>

<item

name="android:windowExitAnimation">@anim/slide_out_bottom</item>

</style>3.在drawable文件夾下創(chuàng)建一個title_background.xml文件,負(fù)責(zé)給文本內(nèi)容添加背景。<?xml

version="1.0"

encoding="UTF-8"?>

<shape

xmlns:android="/apk/res/android">

<corners

android:radius="8dp"/>

<solid

android:color="#FFFFFFFF"/>

</shape>二、自定義控件的布局<LinearLayout

xmlns:android="/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:padding="12dp"

>

<LinearLayout

android:background="@drawable/title_background"

android:id="@+id/lay_container"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginBottom="8dp"

android:orientation="vertical"/>

<TextView

android:id="@+id/btn_cancel"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@drawable/title_background"

android:paddingBottom="8dip"

android:paddingTop="8dip"

android:text="取消"

android:gravity="center"

android:textColor="#007AFF"

android:textSize="17sp"/>

</LinearLayout>三、自定義控件類public

class

ButtomDialog

extends

Dialog

{

public

ButtomDialog(Context

context,

int

themeResId)

{

super(context,

themeResId);

}

public

static

class

Params

{

private

final

List<BottomMenu>

menuList

=

new

ArrayList<>();

private

View.OnClickListener

cancelListener;

private

CharSequence

menuTitle;

private

String

cancelText;

private

Context

context;

}

public

static

class

Builder

{

private

boolean

canCancel

=

true;

private

boolean

shadow

=

true;

private

final

Params

p;

public

Builder(Context

context)

{

p

=

new

Params();

p.context

=

context;

}

public

Builder

setCanCancel(boolean

canCancel)

{

this.canCancel

=

canCancel;

return

this;

}

public

Builder

setShadow(boolean

shadow)

{

this.shadow

=

shadow;

return

this;

}

public

Builder

setTitle(CharSequence

title)

{

this.p.menuTitle

=

title;

return

this;

}

public

Builder

addMenu(String

text,

View.OnClickListener

listener)

{

BottomMenu

bm

=

new

BottomMenu(text,

listener);

this.p.menuList.add(bm);

return

this;

}

public

Builder

addMenu(int

textId,

View.OnClickListener

listener)

{

return

addMenu(p.context.getString(textId),

listener);

}

public

Builder

setCancelListener(View.OnClickListener

cancelListener)

{

p.cancelListener

=

cancelListener;

return

this;

}

public

Builder

setCancelText(int

resId)

{

p.cancelText

=

p.context.getString(resId);

return

this;

}

public

Builder

setCancelText(String

text)

{

p.cancelText

=

text;

return

this;

}

public

ButtomDialog

create()

{

final

ButtomDialog

dialog

=

new

ButtomDialog(p.context,

shadow

?

R.style.Theme_Light_NoTitle_Dialog

:

R.style.Theme_Light_NoTitle_NoShadow_Dialog);

Window

window

=

dialog.getWindow();

window.setWindowAnimations(R.style.Animation_Bottom_Rising);

window.getDecorView().setPadding(0,

0,

0,

0);

WindowManager.LayoutParams

lp

=

window.getAttributes();

lp.width

=

WindowManager.LayoutParams.MATCH_PARENT;

lp.height

=

WindowManager.LayoutParams.WRAP_CONTENT;

window.setAttributes(lp);

window.setGravity(Gravity.BOTTOM);

View

view

=

LayoutInflater.from(p.context).inflate(R.layout.dialog_bottom_menu,

null);

TextView

btnCancel

=

(TextView)

view.findViewById(R.id.btn_cancel);

ViewGroup

layContainer

=

(ViewGroup)

view.findViewById(R.id.lay_container);

ViewGroup.LayoutParams

lpItem

=

new

ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.WRAP_CONTENT);

ViewGroup.MarginLayoutParams

lpDivider

=

new

ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

1);

lpDivider.setMargins(50,0,50,0);

int

dip1

=

(int)

(1

*

p.context.getResources().getDisplayMetrics().density

+

0.5f);

int

spacing

=

dip1

*

12;

boolean

hasTitle

=

!TextUtils.isEmpty(p.menuTitle);

if

(hasTitle)

{

//標(biāo)題樣式

TextView

tTitle

=

new

TextView(p.context);

tTitle.setLayoutParams(lpItem);

tTitle.setGravity(Gravity.CENTER);

tTitle.setTextColor(p.context.getResources().getColor(R.color.colorAccent));

tTitle.setText(p.menuTitle);

tTitle.setPadding(0,

spacing,

0,

spacing);

//單獨給標(biāo)題設(shè)置背景樣式

//

tTitle.setBackgroundResource(R.mon_dialog_selection_selector_top);

layContainer.addView(tTitle);

View

viewDivider

=

new

View(p.context);

viewDivider.setLayoutParams(lpDivider);

viewDivider.setBackgroundColor(0xFFCED2D6);

layContainer.addView(viewDivider);

}

//每一條的樣式

for

(int

i

=

0;

i

<

p.menuList.size();

i++)

{

BottomMenu

bottomMenu

=

p.menuList.get(i);

TextView

bbm

=

new

TextView(p.context);

bbm.setLayoutParams(lpItem);

bbm.setPadding(0,

spacing,

0,

spacing);

bbm.setGravity(Gravity.CENTER);

bbm.setText(bottomMenu.funName);

bbm.setTextColor(0xFF007AFF);

bbm.setTextSize(16);

bbm.setOnClickListener(bottomMenu.listener);

layContainer.addView(bbm);

if

(i

!=

p.menuList.size()

-

1)

{

View

viewDivider

=

new

View(p.context);

viewDivider.setLayoutParams(lpDivider);

viewDivider.setBackgroundColor(0xFFCED2D6);

layContainer.addView(viewDivider);

}

}

if

(!TextUtils.isEmpty(p.cancelText))

{

btnCancel.setText(p.cancelText);

}

if

(p.cancelListener

!=

null)

{

btnCancel.setOnClickListener(p.cancelListener);

}

else

{

btnCancel.setOnClickListener(new

View.OnClickListener()

{

@Override

public

void

onClick(View

v)

{

dialog.dismiss();

}

});

}

dialog.setContentView(view);

dialog.setCanceledOnTouchOutside(canCancel);

dialog.setCancelable(canCancel);

return

dialog;

}

}

private

static

class

BottomMenu

{

public

String

funName;

public

View.OnClickListener

listener;

public

BottomMenu(String

funName,

View.OnClickListener

listener)

{

this.funName

=

funName;

this.listener

=

listener;

}

}

}四、使用public

class

MainActivity

extends

AppCompatActivity

implements

View.OnClickListener

{

private

Button

mDialogCustom;

private

ButtomMenuDialog

dialog;

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

private

void

initView()

{

mDialogCustom

=

(Button)

findViewById(R.id.custom_dialog);

mDialogCustom.setOnClickListener(this);

}

@Override

public

void

onClick(View

v)

{

switch

(v.getId())

{

case

R.id.custom_dialog:

ButtomMenuDialog.Builder

builder

=

new

ButtomMenuDialog.Builder(this);

//添加條目,可多個

builder.addMenu("相機(jī)",

new

View.OnClickListener()

{

@Override

public

void

onClick(View

view)

{

dialog.cancel(

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論