底部弹层Dialog
一.Dialog工具类:
package com.cgw.sport.utils;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import com.cgw.sport.R;
/**
* 弹层工具
* dongtengfei on 2019/8/2 16:04
*/
public class DialogUtils {
/**
* 从底部弹出弹层
*
* @param context
* @param contentView 自定义内容
*/
public static Dialog showBottomDialog(Context context, View contentView, OnClickListener onClickListener) {
Dialog dialog = new Dialog(context, R.style.dialogStyle);
if (contentView == null) {
contentView = LayoutInflater.from(context).inflate(R.layout.view_dialog, null);
Button btn1 = contentView.findViewById(R.id.btn_01);
btn1.setText("确认");
btn1.setOnClickListener(v -> {
dialog.dismiss();
if (onClickListener != null) {
onClickListener.onClickLeft();
}
});
Button btn2 = contentView.findViewById(R.id.btn_02);
btn2.setText("取消");
btn2.setOnClickListener(v -> {
dialog.dismiss();
if (onClickListener != null) {
onClickListener.onClickRight();
}
});
}
dialog.getWindow().setDimAmount(0.5f);//遮罩透明度 0 - 1
dialog.setContentView(contentView);
ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
layoutParams.width = context.getResources().getDisplayMetrics().widthPixels;
contentView.setLayoutParams(layoutParams);
dialog.getWindow().setGravity(Gravity.BOTTOM);
dialog.getWindow().setWindowAnimations(R.style.popwin_anim_style);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
dialog.show();
return dialog;
}
public interface OnClickListener {
void onClickLeft();
void onClickRight();
}
}
其中,布局可以自行定义,弹层的title确定取消的按钮,名称也可以传进来,这样就可以在多处使用。同时也可以再封装, 为不同的布局封装不同的方法。
二.布局类:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:background="@color/gray1"
android:padding="20dp">
<Button
android:id="@+id/btn_01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="取消" />
<Button
android:id="@+id/btn_02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="确定" />
</LinearLayout>
三.dialog样式
<!--底部弹出dialog的弹层样式-->
<style name="dialogStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!--边框-->
<item name="android:windowIsFloating">true</item><!--是否浮现在activity之上-->
<!--<item name="android:windowIsTranslucent">false</item><!–半透明–>-->
<item name="android:windowNoTitle">true</item><!--无标题-->
<item name="android:windowBackground">@color/transparent</item><!--背景透明-->
<item name="android:backgroundDimEnabled">true</item><!--是否有遮罩,false没有-->
<!--<item name="android:backgroundDimAmount">0.5</item><!–遮罩层的透明度–>-->
</style>
<!--设置由下到上显示的动画-->
<style name="popwin_anim_style">
<item name="android:windowEnterAnimation">@anim/login_bottom_show</item>
<item name="android:windowExitAnimation">@anim/login_bottom_hide</item>
</style>
四.使用
DialogUtils.showBottomDialog(this, null, new DialogUtils.OnClickListener() {
@Override
public void onClickLeft() {
//TODO 左边按钮点击监听
}
@Override
public void onClickRight() {
//TODO 右边按钮点击监听
}
});