开发时候需要对整个APP风格统一,所以对话框这种都是需要统一样式的,这种就需要自定义对话框了,可以自定义设置左右按钮文字,标题、内容提示、标题下面还有图标
效果图:
代码使用:
CommonDialog dialog = new CommonDialog(getActivity()); dialog.setMessage(message) .setTitle("提示") .setSingle(false) .setNegtive("取消") .setPositive("确定").setOnClickBottomListener(new CommonDialog.OnClickBottomListener() { @Override public void onPositiveClick() { dialog.dismiss(); //确定操作 } @Override public void onNegtiveClick() { dialog.dismiss(); //取消操作 } }).show();
具体实现代码
import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.text.TextUtils; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.blankj.utilcode.util.BarUtils; import com.blankj.utilcode.util.ScreenUtils; import java.util.Objects; /** * 统一提示框 */ public class CommonDialog extends Dialog { /** * 显示的图片 */ private ImageView imageIv; /** * 显示的标题 */ private TextView titleTv; /** * 显示的消息 */ private TextView messageTv; /** * 确认和取消按钮 */ private TextView negtiveBn, positiveBn; public CommonDialog(Context context) { super(context, R.style.CustomDialog); } /** * 都是内容数据 */ private String message; private String title; private String positive, negtive; private int imageResId = -1; /** * 底部是否只有一个按钮 */ private boolean isSingle = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_tips); //按空白处能取消动画 setCanceledOnTouchOutside(true); //初始化界面控件 initView(); //初始化界面数据 refreshView(); //初始化界面控件的事件 initEvent(); getWindow().setGravity(Gravity.BOTTOM);//设置显示在底部 WindowManager windowManager=getWindow().getWindowManager(); Display display= windowManager.getDefaultDisplay(); WindowManager.LayoutParams layoutParams=getWindow().getAttributes(); layoutParams.width=display.getWidth();//设置Dialog的宽度为屏幕宽度 layoutParams.height = display.getHeight(); getWindow().setAttributes(layoutParams); } /** * 初始化界面的确定和取消监听器 */ 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(); } } }); } /** * 初始化界面控件的显示数据 */ private void refreshView() { //如果用户自定了title和message if (!TextUtils.isEmpty(title)) { titleTv.setText(title); titleTv.setVisibility(View.VISIBLE); } else { titleTv.setVisibility(View.GONE); } if (!TextUtils.isEmpty(message)) { messageTv.setText(message); } //如果设置按钮的文字 if (!TextUtils.isEmpty(positive)) { positiveBn.setText(positive); } else { positiveBn.setText("确定"); } if (!TextUtils.isEmpty(negtive)) { negtiveBn.setText(negtive); } else { negtiveBn.setText("取消"); } if (imageResId != -1) { imageIv.setImageResource(imageResId); imageIv.setVisibility(View.VISIBLE); } else { imageIv.setVisibility(View.GONE); } /** * 只显示一个按钮的时候隐藏取消按钮,回掉只执行确定的事件 */ if (isSingle) { negtiveBn.setVisibility(View.GONE); } else { negtiveBn.setVisibility(View.VISIBLE); } } @Override public void show() { super.show(); refreshView(); Objects.requireNonNull(this.getWindow()).getDecorView().setBackgroundColor(Color.parseColor("#00000000")); // Objects.requireNonNull(this.getWindow()).setLayout(ScreenUtils.getScreenWidth(), ScreenUtils.getScreenHeight() - BarUtils.getActionBarHeight()); // getWindow().setGravity(Gravity.BOTTOM);//设置显示在底部 } /** * 初始化界面控件 */ private void initView() { negtiveBn = findViewById(R.id.cancel_btn); positiveBn = findViewById(R.id.submit_btn); titleTv = findViewById(R.id.tip_tv); messageTv = findViewById(R.id.message_tv); imageIv = findViewById(R.id.image); } /** * 设置确定取消按钮的回调 */ public OnClickBottomListener onClickBottomListener; public CommonDialog setOnClickBottomListener(OnClickBottomListener onClickBottomListener) { this.onClickBottomListener = onClickBottomListener; return this; } public interface OnClickBottomListener { /** * 点击确定按钮事件 */ public void onPositiveClick(); /** * 点击取消按钮事件 */ public void onNegtiveClick(); } public String getMessage() { return message; } public CommonDialog setMessage(String message) { this.message = message; return this; } public String getTitle() { return title; } public CommonDialog setTitle(String title) { this.title = title; return this; } public String getPositive() { return positive; } public CommonDialog setPositive(String positive) { this.positive = positive; return this; } public String getNegtive() { return negtive; } public CommonDialog setNegtive(String negtive) { this.negtive = negtive; return this; } public int getImageResId() { return imageResId; } public boolean isSingle() { return isSingle; } public CommonDialog setSingle(boolean single) { isSingle = single; return this; } public CommonDialog setImageResId(int imageResId) { this.imageResId = imageResId; return this; } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:id="@+id/update_con_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> <View android:id="@+id/back_view" android:layout_width="match_parent" android:layout_height="0dp" android:background="@drawable/top_corners_12dp_white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHeight_percent="0.33" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <TextView android:id="@+id/tip_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="18dp" android:text="提示" android:textColor="@color/colorMainTitleBody" android:textSize="18sp" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="@id/back_view" app:layout_constraintRight_toRightOf="@id/back_view" app:layout_constraintTop_toTopOf="@id/back_view" /> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_marginBottom="10dp" android:maxWidth="150dp" android:maxHeight="150dp" android:visibility="gone" android:layout_marginTop="10dp" app:layout_constraintTop_toBottomOf="@id/tip_tv" app:layout_constraintLeft_toLeftOf="@id/back_view" app:layout_constraintRight_toRightOf="@id/back_view" /> <TextView android:id="@+id/message_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:text="发现新版本" android:textColor="@color/colorMainTitleBody" android:textSize="16sp" app:layout_constraintLeft_toLeftOf="@id/back_view" app:layout_constraintRight_toRightOf="@id/back_view" app:layout_constraintTop_toBottomOf="@id/image" /> <TextView android:id="@+id/cancel_btn" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginBottom="32dp" android:background="@drawable/four_corners_5dp_line" android:gravity="center" android:text="@string/cancel" android:textColor="@color/colorMainStyle" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="14:5" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@id/submit_btn" app:layout_constraintWidth_percent="0.375" /> <TextView android:id="@+id/submit_btn" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginBottom="32dp" android:background="@drawable/four_corners_5dp" android:gravity="center" android:text="@string/update" android:textColor="@color/cardview_light_background" android:textSize="16sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="14:5" app:layout_constraintLeft_toRightOf="@id/cancel_btn" app:layout_constraintRight_toRightOf="parent" app:layout_constraintWidth_percent="0.375" tools:ignore="PrivateResource" /> </androidx.constraintlayout.widget.ConstraintLayout>
style定义:
<style name="CustomDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/dialog_confirm</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:background">#00000000</item> </style>
圆角背景图:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="https://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="40dp" android:height="20dp" /> <solid android:color="#FFFFFF" /> <corners android:radius="12dp" /> </shape>
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/addevelopment/895482.html