仿IOS风格退出弹出框,满足多种需求,可隐藏标题、单个按钮显示等等。
话不多说,先上一波效果图
下面是效果图,先上主图,应该是长这样的,啊哈哈。
1、QQ风格退出效果
2、单个按钮效果
2、文字过多也能正常显示
3、没有标题的效果
4、没有标题+单个按钮的效果
效果图就这么多了,直接贴代码!!!
代码区域
1、项目结构
2、布局预览图
没啥东西,就是标题+内容区域,加两个按钮
布局代码:
view_alertdialog.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialg_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_alert_bg" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="15dp" android:gravity="center" android:textColor="#000000" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:gravity="center" android:textColor="#000000" android:textSize="16sp" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="#c6c6c6" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:paddingBottom="10dp" android:paddingTop="10dp" android:id="@+id/positive" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/shape_alert_left" android:gravity="center" android:textColor="#60A2E8" android:textSize="16sp" /> <View android:id="@+id/line" android:layout_width="0.5dp" android:layout_height="match_parent" android:background="#c6c6c6" /> <TextView android:paddingBottom="10dp" android:paddingTop="10dp" android:id="@+id/negative" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/shape_alert_right" android:gravity="center" android:textColor="#60A2EB" android:textSize="16sp" /> </LinearLayout> </LinearLayout>
布局没啥好看的,里面主要是几个shape用来实现边框圆角的,注意的是,底部两个按钮要单独两个圆角,一个左下圆角,一个右下圆角。如果只显示一个按钮的话,那就左下右下角都要圆角啦。这里我就不贴出来了,有需要到时候可以直接下载源码
AlertDialog.class代码
package com.example.bluehair.qqdialog; import android.app.Dialog; import android.content.Context; import android.view.Display; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; /** * 仿IOS对话框 */ public class AlertDialog { private Context context; private Dialog dialog; private LinearLayout dialog_layout; private TextView title; private TextView content; private TextView positive; private TextView negative; private View line; private Display display; private boolean showTitle = true; private boolean showPosBtn = true; private double proportion=0.5;//布局占屏幕比例 public AlertDialog(Context context) { this.context = context; WindowManager windowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); display = windowManager.getDefaultDisplay(); } public AlertDialog builder() { // 获取Dialog布局 View view = LayoutInflater.from(context).inflate( R.layout.view_alertdialog, null); // 获取自定义Dialog布局中的控件 dialog_layout = (LinearLayout) view.findViewById(R.id.dialg_layout); title = (TextView) view.findViewById(R.id.title); content = (TextView) view.findViewById(R.id.content); positive = (TextView) view.findViewById(R.id.positive); negative = (TextView) view.findViewById(R.id.negative); line = (View) view.findViewById(R.id.line); // 定义Dialog布局和参数 dialog = new Dialog(context, R.style.AlertDialogStyle); dialog.setContentView(view); return this; } public AlertDialog isShow(boolean showTitle, boolean showPosBtn,double proportion) { this.showTitle = showTitle; this.showPosBtn = showPosBtn; this.proportion=proportion; return this; } public AlertDialog setTitle(String title_text) { if ("".equals(title)) { title.setText("标题"); } else { title.setText(title_text); } return this; } public AlertDialog setMsg(String msg) { if ("".equals(msg)) { content.setText("这里是内容!"); } else { content.setText(msg); } return this; } public AlertDialog setCancelable(boolean cancel) { dialog.setCancelable(cancel); return this; } public AlertDialog setPositiveButton(String text, final OnClickListener listener) { if ("".equals(text)) { negative.setText("确定"); } else { negative.setText(text); } negative.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onClick(v); dialog.dismiss(); } }); return this; } public AlertDialog setNegativeButton(String text, final OnClickListener listener) { if ("".equals(text)) { positive.setText("取消"); } else { positive.setText(text); } positive.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onClick(v); dialog.dismiss(); } }); return this; } private void setLayout() { if (showTitle) {//是否显示标题 title.setVisibility(View.VISIBLE); } else { title.setVisibility(View.GONE); } if (!showPosBtn) {//只显示一个按钮 positive.setVisibility(View.GONE); line.setVisibility(View.GONE); negative.setBackgroundResource(R.drawable.shape_alert_all); } else { line.setVisibility(View.VISIBLE);//两个按钮之间的竖线 } if(proportion>0.5){//如果大于屏幕宽度一半,就指定内容最小高度(这里可以去掉) content.setMinHeight(230); } // 调整dialog宽度大小 dialog_layout.setLayoutParams(new FrameLayout.LayoutParams((int) (display .getWidth() * proportion), LayoutParams.WRAP_CONTENT)); } public void show() { setLayout(); dialog.show(); } }
关于如何使用:
new AlertDialog(this).builder() .setTitle("提示") .setMsg("确定退出登录?") .isShow(true, true, 0.5) .setPositiveButton("确认", new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show(); ; } }).setNegativeButton("取消", new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }).show();
这里说下isShow(true,true,0.5)方法
第一个参数(true):是否显示标题
第二个参数(true):是否只显示一个按钮
第三个参数(0.5):弹出dialog占屏幕的宽度(QQ风格Dialog为屏幕一半)
styles代码
<!-- AlertDialog --> <style name="AlertDialogStyle" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowFrame">@null</item> <item name="android:backgroundDimEnabled">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> </style>
到这里的话就差不多结束了!!!
下面放出下载链接,需要的话可以去下载
Github(推荐)
CSDN(不建议)
百度云盘 密码:pfi7