【举例】Android自定义Dialog——做出“确定/取消”的选择

来源:互联网 发布:英语语法 知乎 编辑:程序博客网 时间:2024/06/10 14:47

1、自定义Dialog的界面

<--!dialog_yesorno_for_permission.xml--><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/rootView"    android:layout_width="250dp"    android:layout_height="170dp"    android:background="@drawable/diabg_bkg"    android:orientation="vertical"    >    <RelativeLayout        android:id="@+id/top_rl"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_above="@+id/bottomo_ll"        >        <TextView            android:id="@+id/title"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerHorizontal="true"            android:layout_centerVertical="true"            android:gravity="center_horizontal|center_vertical"            android:text="请授予相关权限,否则程序无法运行。\n\n点击确定。\n点击取消。\n"            android:textColor="@color/black" />    </RelativeLayout>    <View        android:layout_width="match_parent"        android:layout_height="1dp"        android:layout_below="@+id/top_rl"        android:layout_marginBottom="10dp"        android:background="@color/lightgrey" />    <RelativeLayout        android:id="@+id/bottomo_ll"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:orientation="horizontal">        <LinearLayout            android:layout_width="match_parent"            android:layout_height="wrap_content">            <Button                android:id="@+id/acceptbtn"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="12dp"                android:layout_weight="1"                android:background="@null"                android:text="确定"                android:textColor="@color/black"                android:textSize="18sp" />            <View                android:layout_width="1dp"                android:layout_height="match_parent"                android:background="@color/lightgrey" />            <Button                android:id="@+id/refusebtn"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginBottom="6dp"                android:layout_marginTop="12dp"                android:layout_weight="1"                android:background="@null"                android:text="取消"                android:textColor="@color/black"                android:textSize="18sp" />        </LinearLayout>    </RelativeLayout></RelativeLayout>

2. Dialog的形状背景等设置

<--!diabg_bkg.xml--><?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <solid android:color="@android:color/white" />    <corners android:radius="16dp" /></shape>

3.关于该Dialog的Java类文件

import android.app.Dialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;public class YesOrNoDialog extends Dialog {    private Button positiveButton, negativeButton;    private TextView message;    private YesOrNoDialogCallback callback;    //定义“确定/取消”的操作    public enum ClickedButton {POSITIVE, NEGATIVE}    public YesOrNoDialog(Context context) {        super(context, R.style.Dialog_Dim);        setCustomDialog();        getWindow().setLayout((int) (AppConstant.SCRRENWIDTH * 0.7), (int) (AppConstant.SCREENHEIGHT * 0.3));    }    public void setCallback(YesOrNoDialogCallback callback) {        this.callback = callback;    }    //具体的设置Dialog    private void setCustomDialog() {        View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_yesorno_for_permission, null);        message = (TextView) mView.findViewById(R.id.title);        positiveButton = (Button) mView.findViewById(R.id.acceptbtn);        negativeButton = (Button) mView.findViewById(R.id.refusebtn);        positiveButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                callback.onClickButton(ClickedButton.POSITIVE,"");            }        });        negativeButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                callback.onClickButton(ClickedButton.NEGATIVE,"");            }        });        //ViewGroup.LayoutParams params=new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);        super.setContentView(mView);    }    @Override    public void setContentView(int layoutResID) {    }    @Override    public void setContentView(View view, ViewGroup.LayoutParams params) {    }    @Override    public void setContentView(View view) {    }    public void setMeesage(String mes) {        message.setText(mes);    }    //定义回调的接口    public interface YesOrNoDialogCallback {        public void onClickButton(ClickedButton button,String message);    }}

4.使用Dialog

        YesOrNoDialog ynDialog = new YesOrNoDialog(mContext);        ynDialog.setMeesage("请授予相关权限,否则程序无法运行。\n\n点击确定,重新授予权限。\n点击取消,立即终止程序。\n");        ynDialog.setCallback(new YesOrNoDialog.YesOrNoDialogCallback() {            @Override            public void onClickButton(YesOrNoDialog.ClickedButton button, String message) {                if (button == YesOrNoDialog.ClickedButton.POSITIVE) {                    ynDialog.dismiss();                    ....                    //balabala                } else if (button == YesOrNoDialog.ClickedButton.NEGATIVE) {                    ynDialog.dismiss();                    ....                    //balabala                }            }        });        //显示该Dialog,不要忘记        dialog.show();

抓住Demo一只:

为了方便以后调用,本人已经将上述Dialog封装到了.aar文件中。以后调用时,只需要导入第三方包即可。

https://github.com/shanxu100/GUtils

欢迎大家补充交流。

0 0
原创粉丝点击