先看效果图,后给完整代码:
调用的TestDialog类:
package com.example.dialog; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; public class TestDialog extends Dialog implements View.OnClickListener { private Context mContext; private TextView tv_cancel,tv_sure,tv_content,tv_title; private ConfirmListener confirmListener; //确定监听事件 public TestDialog(Context context) { super(context,R.style.DialogTheme); mContext = context; setContentView(R.layout.dialog_layout); Window window = getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.gravity = Gravity.CENTER; window.setAttributes(params); initView(); } private void initView(){ tv_sure = (TextView)findViewById(R.id.dialog_sure); tv_title = (TextView)findViewById(R.id.dialog_title); tv_cancel = (TextView) findViewById(R.id.dialog_cancel); tv_content = (TextView)findViewById(R.id.dialog_content); tv_sure.setOnClickListener(this); tv_cancel.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.dialog_cancel: this.dismiss(); break; case R.id.dialog_sure: confirmListener.onConfirmClick(); this.dismiss(); break; } } //设置确定事件的监听 public void setConfirmListener(ConfirmListener confirmListener){ this.confirmListener = confirmListener; } //确定事件的监听接口 public interface ConfirmListener{ void onConfirmClick(); } //设置提示头部 public void setTitle(String title){ tv_title.setText(title); } //设置提示内容 public void setMessage(String msg){ tv_content.setText(msg); } }
styles.xml样式代码(直接复制到styles.xml即可):
<style name="DialogTheme" parent="@android:style/Theme.Dialog"> <!-- 边框 --> <item name="android:windowFrame">@null</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 半透明 --> <item name="android:windowIsTranslucent">true</item> <!-- 无标题 --> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/transparent</item> <!-- 背景透明 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 模糊 --> <item name="android:backgroundDimEnabled">true</item> <!-- 遮罩层 --> <item name="android:backgroundDimAmount">0.5</item> </style>
样式布局代码(dialog_layout.xml):
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="250dp" android:layout_height="140dp" android:background="@drawable/dialog_bg" android:orientation="vertical" > <TextView android:id="@+id/dialog_title" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:text="温馨提示" android:textColor="@color/colorPrimary" android:textSize="16dp" /> <TextView android:id="@+id/dialog_content" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="50dp" android:text="余额不足,请先充值" android:textColor="#777" android:textSize="15sp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#c0c0c0"/> <LinearLayout android:gravity="center_vertical|center_horizontal" android:id="@+id/ll_btn" android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal"> <TextView android:id="@+id/dialog_cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="取消" android:textSize="15dp" android:textColor="#888" android:gravity="center_horizontal|center_vertical"/> <View android:layout_width="1dp" android:layout_height="match_parent" android:background="#c0c0c0"/> <TextView android:id="@+id/dialog_sure" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textColor="@color/colorPrimary" android:text="确定" android:textSize="15dp" android:gravity="center_horizontal|center_vertical"/> </LinearLayout> </LinearLayout> </RelativeLayout>
圆角效果代码(dialog_bg.xml):
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#fff" /> <corners android:radius="5dp"/> <stroke android:color="#c0c0c0" android:width="1dp"/> </shape>
MainActivity代码:
package com.example.dialog; import androidx.appcompat.app.AppCompatActivity; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btnTest1; private TestDialog testDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView(){ btnTest1 = (Button) findViewById(R.id.btnTest1); btnTest1.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btnTest1: dialogSure(); break; } } //调用Dialog private void dialogSure(){ testDialog = new TestDialog(this); //设置为true时,点击返回或者空白处取消 testDialog.setCancelable(false); testDialog.setMessage("您确定退出吗?"); //设置提示内容 //确定事件处理 testDialog.setConfirmListener(new TestDialog.ConfirmListener() { @Override public void onConfirmClick() { Toast.makeText(MainActivity.this, "退出成功", Toast.LENGTH_SHORT).show(); } }); testDialog.show(); //显示提示 } }
如果疑问,请留言。。。