Android自定义对话框
在Android程序中由于界面风格不同,一般会根据项目需求定义相应的对话框样式,废话不多说,先上效果图。
先在activity_main布局文件中,放置一个按钮,用于弹出对话框
<?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”
xmlns:tools=“http://schemas.android.com/tools”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
tools:context=".MainActivity">
<Button
android:id="@+id/showDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="弹出自定义对话框"/>
创建对话框的显示页面custom_dialog.xml显示界面信息
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tittle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#000"
android:textSize="36sp"
android:visibility="visible"/>
<TextView
android:id="@+id/msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:gravity="center"
android:textSize="26sp"
/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="25dp"
android:background="#AFADAD" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/negative"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="36dp"
android:layout_weight="1"
android:background="@null"
android:textSize="26sp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#AFADAD" />
<Button
android:id="@+id/positive"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="36dp"
android:layout_weight="1"
android:background="@null"
android:textSize="26sp"
/>
</LinearLayout>
</LinearLayout>
创建CustomDiglog类继承自AlertDialog,初始化对话框控件以及点击事件
package com.fangkuai.customdialog;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class CustomDialog extends AlertDialog {
private TextView tittle,msg; //标题,消息
private Button negative,positive; //取消和确认按钮
private String sTittle,sMsg,sNegative,sPositive;
protected CustomDialog(Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_dialog);
initView(); //初始化控件
initEvent(); //初始化控件的点击事件
}
private void initView(){
tittle=findViewById(R.id.tittle);
msg=findViewById(R.id.msg);
negative=findViewById(R.id.negative);
positive=findViewById(R.id.positive);
}
//初始化控件的显示数据
private void refreshView(){
//如果自定义了标题和消息,则直接显示
if (!TextUtils.isEmpty(sTittle)){
tittle.setText(sTittle);
tittle.setVisibility(View.VISIBLE);
}else {
tittle.setVisibility(View.GONE); //隐藏标题
}
if (!TextUtils.isEmpty(sMsg)){
msg.setText(sMsg);
}
//如果自定义了按钮文本,则直接显示,没有则显示“取消”、“确定”
if (!TextUtils.isEmpty(sNegative)){
negative.setText(sNegative);
}else {
negative.setText("取消");
}
if (!TextUtils.isEmpty(sPositive)){
positive.setText(sPositive);
}else {
positive.setText("确定");
}
}
//初始化按钮监听器
private void initEvent(){
negative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickButtonListener!=null){
onClickButtonListener.OnClickNeagtive();
}
}
});
positive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickButtonListener.OnClickPositive();
}
});
}
public interface OnClickButtonListener{
void OnClickNeagtive(); //实现“取消”点击事件的方法
void OnClickPositive(); //实现“确定”点击事件的方法
}
//由于Dialog被创建后,要调用show()方法才会回调onCreate(),所以重写show()方法中调用refreshView()初始化控件数据
@Override
public void show() {
super.show();
refreshView();
}
//设置点击事件的回调
public OnClickButtonListener onClickButtonListener;
public CustomDialog setOnClickButtonListener(OnClickButtonListener onClickButtonListener){
this.onClickButtonListener=onClickButtonListener;
return this;
}
public CustomDialog setTittle(String Tittle) {
this.sTittle = Tittle;
return this;
}
public CustomDialog setMsg(String Msg) {
this.sMsg = Msg;
return this;
}
public CustomDialog setNegative(String Negative) {
this.sNegative = Negative;
return this;
}
public CustomDialog setPositive(String Positive) {
this.sPositive = Positive;
return this;
}
}
最后实现自定义对话框功能
package com.fangkuai.customdialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button showDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
showDialog = (Button) findViewById(R.id.showDialog);
showDialog.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.showDialog:
final CustomDialog customDialog=new CustomDialog(this);
customDialog.setTittle("提示");
customDialog .setMsg("您确定删除该信息吗?");
customDialog.setNegative("取消");
customDialog.setPositive("确定");
customDialog.setOnClickButtonListener(new CustomDialog.OnClickButtonListener() {
@Override
public void OnClickNeagtive() {
customDialog.dismiss();
}
@Override
public void OnClickPositive() {
customDialog.dismiss();
}
});
customDialog.show();
break;
}
}
}
本文地址:https://blog.csdn.net/CSDn_lm1225/article/details/107564691
上一篇: 敢赤手空拳挑战一头狗熊
下一篇: 一向胆小怕事的慈禧为何敢向十一国宣战呢?