Androd 仿IOS风格弹出框

仿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

猜你喜欢

转载自blog.csdn.net/a295268305/article/details/80641405