项目中用到了Dialog和BottonSheetDialog,由于特殊需求,Dialog需要从屏幕左边弹出,而BottonSheetDialog是Android提供的底部窗口控件,从屏幕底部弹出,下面分别介绍一下两种Dialog自定义布局的方法和相关使用介绍
dialog自定义布局,创建一个MyDialog类并继承自Dialog,在构造函数中加载布局,同时,使用接口将点击事件暴露给调用者,下面是相关代码:
public class MyDialog extends Dialog {
private ListAdapter listAdapter;
private ItemClickListener itemClickListener;
// style引用style样式
public MyDialog(Context context, int width, int height, int style, final ItemClickListener listener) {
super(context, style);
this.itemClickListener = listener;//暴露给外界的接口
View view = View.inflate(getContext(),R.layout.dialog_layout,null);
ListView listView = view.findViewById(R.id.list_view);
List<String> list = new ArrayList<>();
list.add("全部");
list.add("未分组");
list.add("生活");
list.add("学习");
list.add("工作");
// 使用ArrayAdapter适配器
listAdapter = new ArrayAdapter<>(context,
android.R.layout.simple_list_item_1, android.R.id.text1, list);
listView.setAdapter(listAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String kind = (String) listAdapter.getItem(i);
if(itemClickListener != null){
itemClickListener.onClick(kind);
setContentView(view);
Window window = getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.gravity = Gravity.START;
params.width = 500;
window.setAttributes(params);//通过window来设置窗口的位置,Start就是屏幕左侧,设置宽度为500px
//自定义接口
interface ItemClickListener{
void onClick(String s);
布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="160dp"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="10dp"
app:cardElevation="0dp"
app:cardBackgroundColor="#ffffff">
<RelativeLayout
android:layout_width="160dp"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="便签分组"
android:textSize="17sp"
android:layout_centerHorizontal="true"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"/>
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/title"
android:background="#000000"/>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/title"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
BottomSheetDialog已经给我们做了非常好的封装,所以使用非常方便,我将BottomSheetDialog的初始化和显示放在一个函数中,调用该函数即可,下面是相关代码:
private void showBottomSheetDialog() {
if(bottomSheetDialog != null) {//已经初始化就不再重新初始化了
bottomSheetDialog.show();
return ;
bottomSheetDialog = new BottomSheetDialog(this);
View view = LayoutInflater.from(this).inflate(R.layout.dialog_bottom_sheet_layout, null);//加载自定义布局
ImageView close = view.findViewById(R.id.close);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bottomSheetDialog.cancel();
CardView one = view.findViewById(R.id.one);
initListener(1,one);//设置点击事件
bottomSheetDialog.setContentView(view);
bottomSheetDialog.setCanceledOnTouchOutside(true);//设置点击窗口外是否关闭窗口
bottomSheetDialog.getBehavior().setDraggable(false);//设置是否可以向下滑动来关闭窗口
bottomSheetDialog.show();
作者 阿玛尔
原文地址
BottomSheetDialog使用解析
Android Support Library 23.2里的 Design Support Library新加了一个Bottom Sheets控件,Bottom Sheets顾名思义就是底部操作控件,用于在屏幕底部创建一个可滑动关闭的视图,可以替代对话框和菜单。其中包含Bo...
public class MyDialog extends Dialog {
private ListAdapter listAdapter;
private ItemClickListener itemClickListener;
// style引用style样式
public MyDialog(Context context, int width, int height, int style, final ItemClickListener listener) {
super(context,
2.扯扯原因
谷歌在2021年底宣布韩国谷歌商店应用支持多种支付方式,但前提是得满足一些开发规范,并且要求使用SheetBottom来开发支付弹出框,我也是第一次接触这玩意儿,所以就开始怼啊,怼完发现还真比自定义的底部弹出Dialog好使。就想分享下这几天的开发过程以及踩的坑,希望能够帮到你。
3.细细分说
继续解决标题中问题的童鞋:
圆角矩形实现:3.2+3.3
展开状态:3.4(直接搜behavior)
3.1 SheetBottom依赖
只要在App级build.gradl
有一个VBA应用的例子中有这么一句代码:
ThisWorkbook.DialogSheets("Start").Show
我找了整个工程都没有看见有“Start”这个sheet,但是程序能运行并且有对话框显示,请问这个对话框如何才能找到?
通过研究,发现原来这儿的DialogSheets实际上就是MS EXCEL 5.0 对话框,这个对
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.
Android 6.0新控件 BottomSheetDialog | 底部对话框 介绍及使用详情extends AppCompatDialog
Base class for Dialogs styled as a bottom sheet
基于Dialog样式的一个底部对话框
先看看效果对于弹出的内容完全由自己来掌控,想实现什么样子就实现什么样子,很灵活使用方法BottomSheet
最近重构项目,想把之前的一些控件替换成BottomSheetDialog。最后选用的是更加方便的BottomSheetDialogFragment。也遇到了很多坑,写出来分享一下。
1.BottomSheetDialogFragment背景圆角设置
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:
由于BottomSheetDialog内部setContentView时会添加进一个height=content_wrap的容器里,所以默认展示出来会是wrap,除非内容区域足够展示全屏,于是我们可以通过修改内部容器的高度来达到全屏。
关键源码如下:
@Override
public void setContentView(View view) {
super.setContentView(wrapInBottomSheet(0, view, null));
@Override
大家都知道IOS的很多菜单都是从底部弹出的,这种展示方式还是很好看的,而丑爆的Android默认弹框一直都是大家一定要摒弃的,那么我们Android如何做出相应效果的弹框。下面我们就介绍这种做法。
底部弹出框布局 dialog_goods_sku_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout...
MD风格的底部弹窗,比自定义dialog或popupwindow使用更简单,功能也更强大。
其实细分来说,是BottomSheet、BottomSheetDialog、BottomSheetDialogFragment
BottomSheet
与主界面同层级关系,可以事件触发,如果有设置显示高度的话,也可以拉出来,且不会影响主界面的交互。
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.