记录一个简易的自定义dialog
package com.example.padlauncher.util;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.LogUtils;
import com.example.padlauncher.R;
public class CustomDialog extends Dialog implements View.OnClickListener {
private TextView mTitle, mMessage, mConfirm, mCancel;
private String sTitle, sMessage, sConfirm, sCancel;
private View.OnClickListener cancelListener, confirmListener;
public CustomDialog setsTitle(String sTitle) {
this.sTitle = sTitle;
return this;
}
public CustomDialog setsMessage(String sMessage) {
this.sMessage = sMessage;
return this;
}
public CustomDialog setsConfirm(String sConfirm, View.OnClickListener listener) {
this.sConfirm = sConfirm;
this.confirmListener = listener;
return this;
}
public CustomDialog setsCancel(String sCancel, View.OnClickListener listener) {
this.sCancel = sCancel;
this.cancelListener = listener;
return this;
}
public CustomDialog(@NonNull Context context) {
super(context);
}
public CustomDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_warm_tip);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setCancelable(false);
//自定义Dialog宽度
WindowManager m = getWindow().getWindowManager();
Display d = m.getDefaultDisplay();
WindowManager.LayoutParams p = getWindow().getAttributes();
Point size = new Point();
d.getSize(size);
p.width = (int) ((size.x)*0.7); //设置为屏幕的0.7倍宽度
getWindow().setAttributes(p);
mTitle = findViewById(R.id.tv_title);
mMessage = findViewById(R.id.tv_content);
mCancel = findViewById(R.id.tv_cancel);
mConfirm = findViewById(R.id.tv_confirm);
if (!TextUtils.isEmpty(sTitle)) {
mTitle.setText(sTitle);
}
if (!TextUtils.isEmpty(sMessage)) {
mMessage.setText(sMessage);
}
if (!TextUtils.isEmpty(sCancel)) {
mCancel.setText(sCancel);
}
if (!TextUtils.isEmpty(sConfirm)) {
mConfirm.setText(sConfirm);
}
mConfirm.setOnClickListener(this);
mCancel.setOnClickListener(this);
}
@Override
public void show() {
//解决dialog弹窗 隐藏状态栏和导航栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
super.show();
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN;
getWindow().getDecorView().setSystemUiVisibility(uiOptions);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.tv_confirm){
if(confirmListener != null){
confirmListener.onClick(v);
}
}
else if(v.getId() == R.id.tv_cancel){
if(cancelListener != null){
cancelListener.onClick(v);
}
}
}
}
xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:background="@drawable/white_corner_shape">
<TextView
android:id="@+id/tv_title"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
android:text="弹窗标题"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/line"
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
<TextView
android:id="@+id/tv_content"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
android:text="你想要写什么内容呢?"
android:textColor="@color/black"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view" />
<View
android:id="@+id/view_1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/line"
app:layout_constraintTop_toBottomOf="@+id/tv_content" />
<TextView
android:id="@+id/tv_cancel"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
android:text="取消"
android:textColor="@color/black"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view_2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/view_1" />
<View
android:id="@+id/view_2"
android:layout_width="1dp"
android:layout_height="?attr/actionBarSize"
android:background="@color/line"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tv_confirm"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tv_cancel"
app:layout_constraintTop_toBottomOf="@+id/view_1" />
<TextView
android:id="@+id/tv_confirm"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
android:text="确定"
android:textColor="@color/black"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/view_2"
app:layout_constraintTop_toBottomOf="@+id/view_1" />
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
调用
public void showDialog(){
CustomDialog customDialog = new CustomDialog(getContext());
customDialog.setsTitle("提示").setsMessage("检测到未连接网络,连接wifi在使用哦").setsCancel("取消", new View.OnClickListener() {
@Override
public void onClick(View view) {
customDialog.dismiss();
}
}).setsConfirm("连接", new View.OnClickListener() {
@Override
public void onClick(View view) {
customDialog.dismiss();
startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
}
}).show();
}