【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>
相关文章推荐
- Android对话框(二)进度条对话框ProgressDialog和自定义对话框CustomDialog
- Android自定义对话框(Custom Dialog)
- Android 日常封装之暴力CustomViewDialog自定义对话框
- 21. android dialog——自定义对话框之二
- Android自定义对话框(Dialog)位置,大小
- Android 自定义对话框(Dialog)设置显示大小方向
- Android自定义对话框(Dialog)位置,大小
- Android学习—自定义对话框Dialog
- Android自定义Dialog对话框
- Android自定义对话框(Dialog)位置,大小
- android 继承dialog自定义对话框
- Android 自定义Dialog对话框
- Android AlertDialog 方法setView(view,0,0,0,0)开发自定义对话框
- Android UI【android 自定义dialog 多选项对话框】
- Android实现自定义对话框(Dialog)
- 20. android dialog——自定义对话框之一
- Android自定义对话框(Dialog)位置,大小
- Android中自定义对话框(Dialog)
- [Android] Android自定义对话框(Dialog)位置,大小
- Android自定义对话框(Dialog)位置,大小