您的位置:首页 > 移动开发 > Android开发

【Android】高仿QQ对话框之自定义对话框CustomDialog

2014-07-17 21:40 351 查看

1.效果对比图





2.对话框布局--confirm_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/confimDialogRoot"
android:layout_width="@dimen/dialogBase_width"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/common_alert_bg" >

<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tvContent"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/tvContent"
android:layout_marginTop="@dimen/dialogBase_title_marginTop"
android:ellipsize="end"
android:gravity="center"
android:singleLine="true"
android:text="标题栏示例"
android:textColor="@color/black"
android:textSize="@dimen/dialogBase_title_textSize" />

<TextView
android:id="@+id/tvContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvTitle"
android:layout_marginBottom="@dimen/dialogBase_body_marginBottom"
android:layout_marginLeft="@dimen/dialogBase_body_marginLeft"
android:layout_marginRight="@dimen/dialogBase_body_marginRight"
android:layout_marginTop="@dimen/dialogBase_body_marginTop"
android:gravity="center_horizontal|left"
android:text="正文内容示例\n\n1.正文内容示例正文内容示例正文内容示例正文内容示例\n2.正文内容示例"
android:textColor="@color/black"
android:textSize="@dimen/dialogBase_content_textSize" />

<View
android:id="@+id/horizontalDividerLine"
android:layout_width="match_parent"
android:layout_height="@dimen/dialogBase_divider_width"
android:layout_below="@+id/tvContent"
android:background="@color/dialog_gray" />

<Button
android:id="@+id/btnSingle"
android:layout_width="match_parent"
android:layout_height="@dimen/dialogBase_btnHeight"
android:layout_below="@+id/horizontalDividerLine"
android:background="@drawable/common_dialog_single_button"
android:ellipsize="end"
android:singleLine="true"
android:text="确定"
android:textColor="@color/dialog_blue"
android:textSize="@dimen/dialogBase_button_textSize" />

</RelativeLayout>

3.自定义Dialog--ConfirmDialog.java

/**
*
*/
package com.example.qq.overall.view;

import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.TextView;

import com.example.qq.R;
import com.example.qq.overall.interfaces.CustomDialogInterface.OnClickListenter;

/**
* Description: 只有一个按钮的对话框
*
* @author danDingCongRong
* @Version 1.0.0
* @Created at 2014-7-17 19:50:49
* @Modified by [作者] on [修改日期]
*/
public class ConfirmDialog extends Dialog {

private CharSequence title;
private CharSequence content;
private CharSequence btnText;

private OnClickListenter btnSingleOnClickListener;

private ConfirmDialog(Context context) {
super(context);
}

private ConfirmDialog(Context context, int theme) {
super(context, theme);
}

public static class Builder {

private Context context;
private ConfirmDialog dialog;

public Builder(Context context) {
this.context = context;
this.dialog = new ConfirmDialog(context, R.style.AlertDialog);
}

public Builder setTitle(CharSequence title) {
dialog.title = title;
return this;
}

public Builder setContent(CharSequence content) {
dialog.content = content;
return this;
}

public Builder setSingleButton(CharSequence text,
OnClickListenter onClickListenter) {
dialog.btnText = text;
dialog.btnSingleOnClickListener = onClickListenter;
return this;
}

public ConfirmDialog create() {
View view = initView();

dialog.setContentView(view);
dialog.setCanceledOnTouchOutside(true);

return dialog;
}

private View initView() {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService("layout_inflater");
View view = inflater.inflate(R.layout.confirm_dialog, null);

TextView tvTitle = (TextView) view.findViewById(R.id.tvTitle);
TextView tvContent = (TextView) view.findViewById(R.id.tvContent);
Button btnSingle = (Button) view.findViewById(R.id.btnSingle);

tvTitle.setText(dialog.title);
tvContent.setText(dialog.content);
btnSingle.setText(dialog.btnText);

btnSingle.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (v.getId() == R.id.btnSingle
&& MotionEvent.ACTION_UP == event.getAction()) {
dialog.btnSingleOnClickListener.onClick(v);
dialog.dismiss();
}
return false;
}
});

return view;
}

}

}
/**
*
*/
package com.example.qq.overall.interfaces;

import android.view.View;

/**
* Description: 自定义对话框中的接口
*
* @author danDingCongRong
* @Version 1.0.0
* @Created at 2014-7-17 08:50:40
* @Modified by [作者] on [修改日期]
*/
public interface CustomDialogInterface {

public static interface OnClickListenter {

public void onClick(View v);
}

}

4.测试代码

public void singleButtonDialog(View view) {
ConfirmDialog.Builder builder = new ConfirmDialog.Builder(context);
builder.setTitle("SD卡不可用");
builder.setContent("SD卡不可用,传文件、图片相关等部分功能将不能正常使用!");
builder.setSingleButton("确定",
new CustomDialogInterface.OnClickListenter() {

@Override
public void onClick(View v) {
Toast.makeText(context, "成功了!!!!!", Toast.LENGTH_LONG)
.show();
}
});

ConfirmDialog dialog = builder.create();
dialog.show();
}


5.其他相关资源文件

<!-- 自定义的对话框 -->
<dimen name="dialogBase_title_textSize">20sp</dimen>
<dimen name="dialogBase_content_textSize">16sp</dimen>
<dimen name="dialogBase_button_textSize">16sp</dimen>
<dimen name="dialogBase_width">310.0dp</dimen>
<dimen name="dialogBase_title_marginTop">15.0dp</dimen>
<dimen name="dialogBase_body_paddingLeft">15.0dp</dimen>
<dimen name="dialogBase_body_paddingRight">15.0dp</dimen>
<dimen name="dialogBase_body_marginTop">10.0dp</dimen>
<dimen name="dialogBase_body_marginBottom">10.0dp</dimen>
<dimen name="dialogBase_body_marginLeft">15.0dp</dimen>
<dimen name="dialogBase_body_marginRight">15.0dp</dimen>
<dimen name="dialogBase_body_max_height">420.0dp</dimen>
<dimen name="dialogBase_btnHeight">44.0dp</dimen>
<dimen name="dialogBase_divider_width">1.0px</dimen>
<!-- 自定义对话框  CustomDialog -->
<color name="transparent">#00000000</color>
<color name="dialog_gray">#34000000</color>
<color name="dialog_blue">#ff0079ff</color>
<!-- 自定义CustomDialog样式 -->
<style name="AlertDialog" parent="@android:style/Theme.Translucent">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/common_alert_btn_pressed" android:state_pressed="true"/>
<item android:drawable="@color/transparent"/>

</selector>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: