欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 自定义Dialog使用模板

程序员文章站 2022-09-16 20:15:53
Dialog 很经常用到的一个控件,但大多时候系统默认的样式是不满足于项目使用的,故自定义了一套合适的Dialog模板方便日常使用。布局:

Dialog 很经常用到的一个控件,但大多时候系统默认的样式是不满足于项目使用的,故自定义了一套合适的Dialog模板方便日常使用。

布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:background="@drawable/image37"
    android:layout_width="match_parent"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_height="140dp">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:paddingTop="15dp"
        android:orientation="vertical">
        <TextView
            android:id="@+id/message"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:gravity="center"
            android:lineSpacingExtra="3dp"
            android:lineSpacingMultiplier="1.2"
            android:textColor="#EDE7D1"
            android:textSize="18dp"
            tools:text="游戏已有最新版,请前往下载" />
        <RelativeLayout
            android:layout_marginTop="5dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:id="@+id/leftBtn"
                android:layout_centerHorizontal="true"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:background="@drawable/btn6"
                tools:text="直接下载(推荐)"
                android:textStyle="bold"
                android:textColor="#fff"
                android:textSize="16sp" />
            <Button
                android:id="@+id/rightBtn"
                android:layout_width="90dp"
                android:layout_height="30dp"
                android:layout_alignBottom="@id/leftBtn"
                android:layout_marginTop="20dp"
                android:layout_toRightOf="@id/leftBtn"
                android:background="#00000000"
                android:text="其他下载"
                android:textColor="#448DC7"
                android:textSize="14sp" />
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>
样式:
<style name="ATDialog" parent="android:style/Theme.Dialog">
	  <!--背景颜色及和透明程度-->
	  <item name="android:windowBackground">@android:color/transparent</item>
	  <!--是否去除标题 -->
	  <item name="android:windowNoTitle">true</item>
	  <!--是否去除边框-->
	  <item name="android:windowFrame">@null</item>
	  <!--是否浮现在activity之上-->
	  <item name="android:windowIsFloating">true</item>
	  <!--是否模糊-->
	  <item name="android:backgroundDimEnabled">true</item>
</style>
Dialog源码:
public class ATDialog extends Dialog {
//TODO 提示消失内容
private TextView DialogMessage ;
//TODO 确认和取消按钮
private Button okButton ,cancelButton;
//TODO 控件赋值
private String message;
private String okText,cancelText ;
public ATDialog(Context context) {
    super(context, R.style.ATDialog);
}
//TODO 初始化设置
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.at_dialog);
    //按空白处不能取消动画
    setCanceledOnTouchOutside(false);
    //初始化界面控件数据
    refreshView();
    //初始化界面控件的事件
    initEvent();
}
//TODO 初始化控件内容
private void refreshView() {
    DialogMessage = (TextView) findViewById(R.id.message);
    okButton = (Button) findViewById(R.id.leftBtn);
    cancelButton = (Button) findViewById(R.id.rightBtn);
    //设置默认文本
    if (!TextUtils.isEmpty(message)) {
        DialogMessage.setText(message);
    }else {
        DialogMessage.setText("哈哈哈哈啊哈哈哈哈");
    }
    if (!TextUtils.isEmpty(okText)) {
        okButton.setText(okText);
    }else {
        okButton.setText("确定");
    }
    if (!TextUtils.isEmpty(cancelText)) {
        cancelButton.setText(cancelText);
    }else {
        cancelButton.setText("取消");
    }
}
//TODO 设置监听
private void initEvent() {
    //设置确定按钮被点击后,向外界提供监听
    okButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if ( onClickBottomListener!= null) {
                onClickBottomListener.onOKClick();
            }
        }
    });
    //设置取消按钮被点击后,向外界提供监听
    cancelButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if ( onClickBottomListener!= null) {
                onClickBottomListener.onCancelClick();
            }
        }
    });
}
@Override
public void show() {
    super.show();
    refreshView();
}
/**
 * 设置确定取消按钮的回调
 */
public OnClickBottomListener onClickBottomListener;
public ATDialog setOnClickBottomListener(OnClickBottomListener onClickBottomListener) {
    this.onClickBottomListener = onClickBottomListener;
    return this;
}
public interface OnClickBottomListener{
    /**
     * 点击确定按钮事件
     */
    public void onOKClick();
    /**
     * 点击取消按钮事件
     */
    public void onCancelClick();
}
public ATDialog setMessage(String message) {
    this.message = message;
    return this ;
}
public ATDialog setokText(String okText) {
    this.okText = okText;
    return this ;
}
public ATDialog setcancelText(String cancelText) {
    this.cancelText = cancelText;
    return this ;
}
}
使用:
    private void ShowDialog(){

        final ATDialog dialog = new ATDialog(MainActivity.this);
        dialog.setMessage("游戏已有最新版,请前往下载")
                .setokText("直接下载(推荐)")
                .setcancelText("其他下载")
                .setOnClickBottomListener(new ATDialog.OnClickBottomListener() {
            @Override
            public void onOKClick() {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "点击了按钮1", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onCancelClick() {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "点击了按钮2", Toast.LENGTH_SHORT).show();
            }
        }).show();
    }

献上DemoDemo地址:https://download.csdn.net/download/weixin_40770051/12660634

献上DemoDemo地址:https://download.csdn.net/download/weixin_40770051/12660634

参阅致谢:https://www.jianshu.com/p/25272f045d78
参阅致谢:https://www.jianshu.com/p/9fff573724de

本文地址:https://blog.csdn.net/weixin_40770051/article/details/107578905