Android 通用Dialog的写法

1、概述

  • 相信大家在项目开发中都会用到一些提示框,如果用的地方多了系统的dialog无法满足需求,那我们就要自定义dialog了,怎样能够简单方便呢?不多说了直接上代码。

2、BaseDialog.java

public class BaseDialog extends Dialog {

    private Context context;
    private int itemLayoutId;

    /**
     * 无高度设置、居中显示
     * @param mContext
     * @param view
     * @return
     */
    public static BaseDialog showDialog(Activity mContext, int view) {
        BaseDialog dialog = new BaseDialog(mContext, R.style.SubmitDialog, view);
        dialog.show();
        return dialog;
    }

    /**
     * 距离头部、底部的高度
     * @param mContext
     * @param view
     * @param y
     * @return
     */
    public static BaseDialog showDialog(Activity mContext, int view,int mGravity, int y) {
        BaseDialog dialog = new BaseDialog(mContext, R.style.SubmitDialog, view);
        Window dialogWindow = dialog.getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setGravity(mGravity);
        lp.y = y; // 新位置Y坐标
        dialogWindow.setAttributes(lp);
        dialog.show();
        return dialog;
    }

    public BaseDialog(Context context, int theme, int itemLayoutId) {
        super(context, theme);
        this.context = context;
        this.itemLayoutId = itemLayoutId;
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(itemLayoutId);
    }

    /**
     * 通过控件的Id获取对于的控件,如果没有则加入views
     *
     * @param viewId
     * @return
     */
    public  T getView(int viewId) {
        View view = null;
        view = findViewById(viewId);
        return (T) view;
    }

    /**
     * 为TextView设置字符串
     *
     * @param viewId
     * @param text
     * @return
     */
    public BaseDialog setText(int viewId, String text) {
        TextView view = getView(viewId);
        view.setText(text);
        return this;
    }
}

3、Dialog样式

  • 在styles.xml文件中设置dialog样式
  
  -- 设置Dialog弹出样式 -->
    


//颜色透明
 "transparents">#00000000

4、Dialog布局文件

  • 布局文件根据自己项目需求而定,下面给出一个例子share_dialog.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="110dp"
        android:layout_gravity="center"
        android:background="@drawable/ll_white"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:textColor="#000000"
            android:textSize="20sp" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="@color/line_tv" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:orientation="horizontal">

            <TextView
                android:clickable="true"
                android:id="@+id/tv_cancel"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:textColor="#1b77c6"
                android:textSize="18sp" />
            <View
                android:layout_width="1dp"
                android:layout_height="match_parent"
                android:background="@color/line_tv" />
            <TextView
                android:clickable="true"
                android:id="@+id/tv_btn"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:textColor="#1b77c6"
                android:textSize="18sp" />
        LinearLayout>
    LinearLayout>
LinearLayout>

5、使用方式

  final BaseDialog dialog = BaseDialog.showDialog(mContext, R.layout.share_dialog, Gravity.TOP,600);
                dialog.setText(R.id.tv_title, "您确定要退出登录吗?");
                dialog.setText(R.id.tv_cancel, "取消");
                dialog.setText(R.id.tv_btn, "确定");
                dialog.getView(R.id.tv_cancel).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                dialog.getView(R.id.tv_btn).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       //逻辑代码
                    }
                });
  • 如果要布局居中则不用传入高度,更多方法自己可以试着扩展。

6、效果图
Android 通用Dialog的写法_第1张图片

  • 例子只实现了一个简单的布局,根据自己功能的需求传入不同的布局就可以了。。。

你可能感兴趣的:(Android)