自定义对话框

来源:互联网 发布:linux 查看内存多大 编辑:程序博客网 时间:2024/06/05 17:51
一、自定义Dialog格式:
如果不进行这一步,对对话框添加的布局将很难进行调试。
<!-- **************************对话框风格**************************** -->
<!-- dialog style -->
<style name="dialog_style">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
在构造方法中使用:
public CustomDialog(Context context) {
super(context,R.style.dialog_style);
init(context);
}
二、自定义背景、圆弧:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="0.5dp"
android:color="#cccccc" />
<corners android:radius="20dp" />
<solid android:color="#FFFFFF"/>
</shape>
三、xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<LinearLayout
android:id="@+id/dialog_lLayout"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="@drawable/custom_dialog_shape"
android:orientation="vertical">
<TextView
android:id="@+id/dialog_txt_title"
android:gravity="center"
android:layout_width="match_parent"
android:textSize="25sp"
android:text="标题标题标题"
android:layout_height="0dp"
android:layout_weight="2"/>

<View
android:id="@+id/hor_line_view"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#cccccc" />


<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">

<TextView
android:id="@+id/dialog_txt_cancel"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="20sp"
android:layout_height="match_parent"
android:text="取消"/>
<View
android:id="@+id/ver_line_view"
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#cccccc" />
<TextView
android:id="@+id/dialog_txt_confirm"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="20sp"
android:layout_height="match_parent"
android:text="确定"/>
</LinearLayout>
</LinearLayout>


</LinearLayout>
四、自定义Dialog:
package com.tentinet.testcustomdialog;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
* <h3>Description</h3> 自定义对话框
* TODO
* <h3>Author</h3> lzb
* <h3>Date</h3> 2016/3/1 13:36
* <h3>Copyright</h3> Copyright (c)2016 Shenzhen Tentinet Technology Co., Ltd. Inc. All rights reserved.
*/
public class CustomDialog extends Dialog {


private Context context;
/** 对话框确定按钮*/
private TextView txt_confirm;
/** 对话框标题*/
private TextView txt_title;
/** 对话框取消按钮*/
private TextView txt_cancel;
public CustomDialog(Context context) {
super(context,R.style.dialog_style);
init(context);
}
public CustomDialog(Context context, int themeResId) {
super(context, themeResId);
init(context);

}
protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
init(context);
}
/**
* 初始化
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,13:43
* <h3>UpdateTime</h3> 2016/3/1,13:43
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
* @param context
*/
private void init(Context context) {
this.context = context;
this.setCancelable(false);
this.setCanceledOnTouchOutside(false);
this.setContentView(R.layout.custom_dialog_layout);

View parentView = findViewById(R.id.dialog_lLayout);
//获取手机屏幕分辨率信息的类
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//手机屏幕的宽度
int widthScreen = displayMetrics.widthPixels;
//手机屏幕的高度
int heightScreen = displayMetrics.heightPixels;
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams((int)(widthScreen * 0.85f) , (int)(heightScreen * 0.3f) );
layoutParams.gravity = Gravity.CENTER;
parentView.setLayoutParams(layoutParams);
txt_title = (TextView) findViewById(R.id.dialog_txt_title);
txt_cancel = (TextView) findViewById(R.id.dialog_txt_cancel);
txt_confirm = (TextView) findViewById(R.id.dialog_txt_confirm);
}

/**
* 设置对话框标题
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,16:16
* <h3>UpdateTime</h3> 2016/3/1,16:16
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
* @param title 对话框标题
*/
public CustomDialog setTitle(String title){
txt_title.setText(title);
return this;
}

/**
* 设置对话框标题字体大小
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,16:16
* <h3>UpdateTime</h3> 2016/3/1,16:16
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
* @param titleSize 对话框标题字体大小 单位默认为dp
*/
public CustomDialog setTitleSize(Context context,float titleSize){
txt_title.setTextSize(px2sp(context, titleSize));
return this;
}


/**
* 设置取消和确认按钮的颜色
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,16:22
* <h3>UpdateTime</h3> 2016/3/1,16:22
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
* @param colorId 颜色的id
* @return 当前对象
*/
public CustomDialog setCancelAndConfirmColor(int colorId){
txt_cancel.setTextColor(colorId);
txt_confirm.setTextColor(colorId);
return this;
}

/**
* 设置取消和确认按钮字体大小
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,16:22
* <h3>UpdateTime</h3> 2016/3/1,16:22
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
* @param textSize 颜色的id
* @return 当前对象
*/
public CustomDialog setCancelAndConfirmColorSize(Context context,float textSize){
txt_cancel.setTextSize(px2sp(context,textSize));
txt_confirm.setTextSize(px2sp(context,textSize));
return this;
}
/**
* 设置监听
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,14:50
* <h3>UpdateTime</h3> 2016/3/1,14:50
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
*/
public CustomDialog setCancelListener(final CustomDialog.OnClickListener onClickListener){
txt_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickListener.onClick(CustomDialog.this, R.id.dialog_txt_cancel, null);
}
});
return this;
}

/**
* 设置监听
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,14:50
* <h3>UpdateTime</h3> 2016/3/1,14:50
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
*/

public CustomDialog setConfirmListener(final CustomDialog.OnClickListener onClickListener){
txt_confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickListener.onClick(CustomDialog.this, R.id.dialog_txt_confirm, null);
}
});
return this;
}


/**
* px值转换为sp值,保证文字大小不变
*
*
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,16:35
* <h3>UpdateTime</h3> 2016/3/1,16:35
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
* @param pxValue
* @param pxValue
* DisplayMetrics类中属性scaledDensity
* @return
*/
private int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}


/**
* 对话框按钮点击回调事件
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,14:50
* <h3>UpdateTime</h3> 2016/3/1,14:50
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
*/
public interface OnClickListener {
/**
* 对话框按钮被点击时候调用
*
*
* <h3>Version</h3> 1.0
* <h3>CreateTime</h3> 2016/3/1,14:50
* <h3>UpdateTime</h3> 2016/3/1,14:50
* <h3>CreateAuthor</h3> lzb
* <h3>UpdateAuthor</h3>
* <h3>UpdateInfo</h3> (此处输入修改内容,若无修改可不写.)
*
* @param dialog 当前对话框对象
* @param id 被点击按钮的id
* @param object 附带信息
*/
public void onClick(CustomDialog dialog, int id, Object object);

}
}
五、main中使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

new CustomDialog(this).setTitle("确定放弃?")
.setCancelAndConfirmColor(Color.BLUE)
.setCancelListener(new CustomDialog.OnClickListener() {
@Override
public void onClick(CustomDialog dialog, int id, Object object) {
Toast.makeText(MainActivity.this,"取消",Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
})
.setConfirmListener(new CustomDialog.OnClickListener() {
@Override
public void onClick(CustomDialog dialog, int id, Object object) {
Toast.makeText(MainActivity.this,"确认",Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}).show();
}
1 0
原创粉丝点击