Android中如何使用ButtomDialog自定义底部弹出框
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,这篇文章主要介绍"Android中如何使用ButtomDialog自定义底部弹出框",在日常操作中,相信很多人在Android中如何使用ButtomDialog自定义底部弹出框问题上存在疑惑,小编查阅
千家信息网最后更新 2025年11月12日Android中如何使用ButtomDialog自定义底部弹出框
这篇文章主要介绍"Android中如何使用ButtomDialog自定义底部弹出框",在日常操作中,相信很多人在Android中如何使用ButtomDialog自定义底部弹出框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android中如何使用ButtomDialog自定义底部弹出框"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一 、先来配置自定义控件需要的资源
1.在res文件夹下创建一个anim文件夹并创建两个slide_in_bottom.xml、slide_out_bottom.xml文件,负责弹框进出动画。
2.在style.xml添加阴影和动画样式。
3.在drawable文件夹下创建一个title_background.xml文件,负责给文本内容添加背景。
二、自定义控件的布局
三、自定义控件类
public class ButtomDialog extends Dialog { public ButtomDialog(Context context, int themeResId) { super(context, themeResId); } public static class Params { private final List 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) { //标题样式 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); //单独给标题设置背景样式// tTitle.setBackgroundResource(R.drawable.common_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("相机", new View.OnClickListener() { @Override public void onClick(View view) { dialog.cancel(); Toast.makeText(MainActivity.this, "相机", Toast.LENGTH_SHORT).show(); } }).addMenu("相册", new View.OnClickListener() { @Override public void onClick(View view) { dialog.cancel(); Toast.makeText(MainActivity.this, "相册", Toast.LENGTH_SHORT).show(); } }); //下面这些设置都可不写 builder.setTitle("这是标题");//添加标题 builder.setCanCancel(false);//点击阴影时是否取消dialog,true为取消 builder.setShadow(true);//是否设置阴影背景,true为有阴影 builder.setCancelText("取消");//设置最下面取消的文本内容 //设置点击取消时的事件 builder.setCancelListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.cancel(); Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); dialog = builder.create(); dialog.show(); break; default: break; } }}到此,关于"Android中如何使用ButtomDialog自定义底部弹出框"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
文件
底部
标题
样式
阴影
学习
控件
文件夹
背景
内容
动画
文本
更多
相册
相机
帮助
实用
可不
接下来
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
vf怎么实现数据库统计
烟台打卡软件开发
app漏洞挖掘和网络安全
县委网信办网络安全工作报告
数据库连接错误3706
数据库关系模式分解无损连接
er数据库设计工具
数据库基数怎么求
肇庆服务软件开发收费
龙之谷与服务器断开
济南打印软件开发公司
华为北研所网络安全部门
蓝思科技飞鸽互联网下载
网络安全宣传短视频学生
中异数据库链接不上
浦东新区会计软件开发问答知识
河北省教育网络安全象牙塔
福字设计软件开发
tidb数据库的三层架构
南宁智能安全文化展厅软件开发
软件开发目标如何写
大专毕业软件开发6年了
车辆公告数据库
mysql数据库怎么进去
银行软件开发战略合作协议
中国无线网络安全论坛
g6 服务器
计算机三级网络技术编程
福字设计软件开发
我国网络技术PPT