版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人農(nóng)田承包經(jīng)營權(quán)合同樣本4篇
- 水電工程2025年度外包服務(wù)商合同
- 2025年度個人住宅門窗智能控制系統(tǒng)集成合同4篇
- 二零二五版電子商務(wù)安全合同:SET協(xié)議下的在線支付數(shù)據(jù)安全3篇
- 二零二五版建筑工程施工圖紙保密合同3篇
- 二零二五年度學(xué)校食堂運營管理承包合同4篇
- 二零二五版綠色金融產(chǎn)品設(shè)計與發(fā)行補(bǔ)充合同范本大全3篇
- 二零二五年貨物進(jìn)口代理合同2篇
- 2025年新型材料研發(fā)中心場地租賃合同9篇
- 2025年西安建工合同范本:裝配式建筑生產(chǎn)與施工合同2篇
- 教師培訓(xùn)課件信息技術(shù)與數(shù)字素養(yǎng)教育
- 外觀專利授權(quán)協(xié)議書
- 全套消防管理記錄本
- 項目管理實施規(guī)劃-無錫萬象城
- 浙大一院之江院區(qū)就診指南
- 離婚協(xié)議書電子版下載
- 完整版供應(yīng)商質(zhì)量審核檢查評分表(供應(yīng)商審核表)
- 項目日程表模板
- 質(zhì)量評估報告(光伏)
- 農(nóng)村個人房屋抵押借款合同
- 公衛(wèi)執(zhí)業(yè)醫(yī)師述職報告
評論
0/150
提交評論