Android自定义Dialog

来源:互联网 发布:国画淘宝梅花挂客厅 编辑:程序博客网 时间:2024/06/16 20:08

效果图:
这里写图片描述

实现方法

新建一个Commondialog类继承Dialog,然后自定义一个layout,通过setContentView方法来重新设置对话框的View,以达到自定义的效果。

1.CommonDialog类:

public class CommonDialog extends Dialog {    private Context mContext;    private ClickCallBack mCallBack;    public CommonDialog(Context context, ClickCallBack callBack) {        super(context, R.style.DialogStyle);        mContext = context;        mCallBack = callBack;    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        init();    }    public void init() {        LayoutInflater inflater = LayoutInflater.from(mContext);        View view = inflater.inflate(R.layout.common_dialog, null);        setContentView(view);        Window dialogWindow = getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        DisplayMetrics dm = mContext.getResources().getDisplayMetrics();        lp.width = (int) (dm.widthPixels * 0.8); // 把对话框宽度设置为屏幕宽度的0.8        dialogWindow.setAttributes(lp);        // 设置按钮监听        TextView tv_ok = (TextView) view.findViewById(R.id.tv_ok);        tv_ok.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mCallBack.onConfirm();                dismiss();            }        });        TextView tv_cancel = (TextView) view.findViewById(R.id.tv_cancel);        tv_cancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mCallBack.onCancel();                dismiss();            }        });    }    // 回调接口,执行具体的处理逻辑    public interface ClickCallBack {        public void onConfirm();        public void onCancel();    }}

2.自定义的布局:

<?xml version="1.0" encoding="UTF-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/dialog_layout"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:gravity="center_horizontal"    android:orientation="vertical"    android:layout_marginBottom="10dp"    android:background="@drawable/dialog_bg">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="1dp"        android:gravity="center_horizontal"        android:padding="10dp"        android:text="提示"        android:textSize="16sp"        android:textColor="#000000"        android:textStyle="bold"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="是否退出应用?"        android:textSize="16sp"        android:textColor="#000000" />    <View        android:layout_width="match_parent"        android:layout_height="0.5dp"        android:background="#E3E3E3"        android:layout_marginTop="10dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">        <TextView            android:id="@+id/tv_ok"            android:layout_width="0dp"            android:layout_height="30dp"            android:layout_weight="1"            android:text="确定"            android:textSize="16sp"            android:layout_marginTop="10dp"            android:layout_marginBottom="10dp"            android:focusable="true"            android:clickable="true"            android:gravity="center"            android:textColor="#358AE4" />        <View            android:layout_width="0.5dp"            android:layout_height="match_parent"            android:background="#E3E3E3" />        <TextView            android:id="@+id/tv_cancel"            android:layout_width="0dp"            android:layout_height="30dp"            android:layout_weight="1"            android:text="取消"            android:textSize="16sp"            android:layout_marginTop="10dp"            android:layout_marginBottom="10dp"            android:focusable="true"            android:clickable="true"            android:gravity="center"            android:textColor="#358AE4" />    </LinearLayout></LinearLayout>

3.在styles.xml中定义的对话框样式:

<style name="DialogStyle">    <item name="android:windowBackground">@android:color/transparent</item>    <item name="android:windowFrame">@null</item>    <item name="android:windowNoTitle">true</item>    <item name="android:windowIsFloating">true</item>    <item name="android:windowIsTranslucent">true</item>    <item name="android:windowContentOverlay">@null</item>    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>    <item name="android:backgroundDimEnabled">true</item></style>

4.对话框圆角化:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <!-- 圆角 -->    <corners android:radius="5dp" />    <!-- 填充色-->    <solid android:color="#FFFFFF" /></shape>

使用方法

CommonDialog dialog = new CommonDialog(MainActivity.this, new CommonDialog.ClickCallBack() {    @Override    public void onConfirm() {        Toast.makeText(MainActivity.this, "点击确定", Toast.LENGTH_SHORT).show();    }    @Override    public void onCancel() {        Toast.makeText(MainActivity.this, "点击取消", Toast.LENGTH_SHORT).show();    }});dialog.show();
1 0
原创粉丝点击