Android Studio 自定义对话框
代码主要包括四个部分:activity_main.xml用于存放界面控件,custom.xml用于显示界面信息,CommonDialog用于初始化自定义对话框中的控件以及响应的按钮点击事件,MainActivity用于实现自定义对话框的功能。
话不多说:直接上代码
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_dialog"
android:text="弹出自定义对话框"/>
</LinearLayout>
在activity_main.xml布局文件中,主要=放置一个button按钮,用于显示弹出自定义对话框。
custom.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:gravity="center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:visibility="visible"
android:textColor="#333333"
android:textSize="18sp"
android:layout_marginBottom="16dp"/>
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginLeft="20dp"
android:textColor="#999999"
android:textSize="14sp"
android:layout_marginRight="20dp"/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="16dp"
android:background="#E8E8E8"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/negtive"
android:layout_marginLeft="10sp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:singleLine="true"
android:textColor="#999999"
android:textSize="16sp"/>
<View
android:id="@+id/column_line"
android:layout_width="2dp"
android:layout_height="match_parent"
android:background="#E8E8E8"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/positive"
android:layout_marginRight="10sp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:textColor="#38ADFF"
android:textSize="16sp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
由于自定义对话框需要一个布局文件来显示界面信息因此需要创建一个custom.xml布局文件。里面放置2个TextView控件分别用于显示标题和提示信息。2个Button控件分别用于显示“取消”按钮和“确定”按钮。
CommonDialog:
package cn.itcast.customdialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
public class CommonDialog extends AlertDialog {
private TextView titleTv;
private TextView messageTv;
private Button negtiveBn,positiveBn;
protected CommonDialog(Context context) {
super(context);
}
private String message; //显示的消息
private String title; //显示的标题
private String positive; //确认按钮
private String negtive; //取消按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView(); //初始化界面控件
initEvent(); //初始化界面控件的点击事件
}
//初始化界面控件
private void initView() {
negtiveBn = (Button)findViewById(R.id.negtive);
positiveBn = findViewById(R.id.positive);
titleTv = findViewById(R.id.title);
messageTv = findViewById(R.id.message);
}
//初始化界面控件的显示数据
private void refreshView(){
//如果自定义了title和message的信息,则会在弹出框中显示
if (!TextUtils.isEmpty(title)){
titleTv.setText(title); //设置标题控件的文本为自定义的title
titleTv.setVisibility(View.VISIBLE);//标题控件设置为显示状态
}else {
titleTv.setVisibility(View.GONE); //标题控件设置为隐藏状态
}
if (!TextUtils.isEmpty(message)){
messageTv.setText(message); //设置按钮的文本为自定义的message信息
}
//如果没有自定义按钮的文本,则默认显示“确定”和"取消”
if (!TextUtils.isEmpty(positive)){
positiveBn.setText(positive);
}else {
positiveBn.setText("确定");
}
if (!TextUtils.isEmpty(negtive)){
negtiveBn.setText(negtive);
}else {
negtiveBn.setText("取消");
}
}
//初始化界面控件的确定和取消监听器
private void initEvent() {
positiveBn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickBottomListener != null){
onClickBottomListener.onPositiveClick();
}
}
});
negtiveBn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onClickBottomListener!=null){
onClickBottomListener.onNegtiveClick();
}
}
});
}
@Override
public void show(){
super.show();
refreshView();
}
public interface onClickBottomListener{
void onPositiveClick(); //实现 确定 按钮的点击事件的方法
void onNegtiveClick(); //实现 取消 按钮的点击事件的方法
}
//设置 确定和取消 按钮的回调
public CommonDialog.onClickBottomListener onClickBottomListener;
public CommonDialog setOnClickBottomListener(CommonDialog.onClickBottomListener onClickBottomListener){
this.onClickBottomListener = onClickBottomListener;
return this;
}
public CommonDialog setMessage(String message) {
this.message = message;
return this;
}
public CommonDialog setPositive(String positive) {
this.positive = positive;
return this;
}
public CommonDialog setTitle(String title) {
this.title = title;
return this;
}
public CommonDialog setNegtive(String negtive) {
this.negtive = negtive;
return this;
}
}
CommonDialog类继承AlerIDialog类,用于初始化自定义对话框中的控件以及响应按钮的点击事件。
MainActivity:
package cn.itcast.customdialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
Button btn_dialog = findViewById(R.id.btn_dialog);
btn_dialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final CommonDialog dialog = new CommonDialog(MainActivity.this);
dialog.setMessage("你确定要删除的信息:");
dialog.setNegtive("取消");
dialog.setPositive("确定");
dialog.setTitle("提示");
dialog.setOnClickBottomListener(new CommonDialog.onClickBottomListener() {
@Override
public void onPositiveClick() {
dialog.dismiss();
}
@Override
public void onNegtiveClick() {
dialog.dismiss();
}
});
dialog.show();
}
});
}
}
以上就是全部的代码,下面就自己运行一下吧!