在开发android项目的过程中,弹出框真的是我们的常见的一种互动式窗体,但是android系统自带的弹出框往往都不能满足我们的需要,大多数的时候需要我们自定义一种更漂亮的窗体来来展示给用户。
接下来是我很久之前用的一个自定义弹出框,记录一下,以便自己日后使用。
0、先来一张效果图
1、先定义个一个继承自dialog的自定义弹框customdialog
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; /** * 作者 aaron zhao * 时间 2015/9/16 11:21 * 名称 customdialog.java 描述 */ public class customdialog extends dialog { /* constructor */ private customdialog(context context) { super(context); } private customdialog(context context, int themeresid) { super(context, themeresid); } private customdialog(context context, boolean cancelable, oncancellistener cancellistener) { super(context, cancelable, cancellistener); } /* builder */ public static class builder { private textview tvtitle, tvwarning, tvinfo; private button btncancel, btnconfirm; private view mlayout; private view.onclicklistener mbuttoncancelclicklistener; private view.onclicklistener mbuttonconfirmclicklistener; private customdialog mdialog; public builder(context context) { mdialog = new customdialog(context, r.style.custom_dialog); layoutinflater inflater = (layoutinflater) context.getsystemservice(context.layout_inflater_service); // 加载布局文件 mlayout = inflater.inflate(r.layout.dialog_custom, null, false); // 添加布局文件到 dialog mdialog.addcontentview(mlayout, new viewgroup.layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content)); tvtitle = (textview) mlayout.findviewbyid(r.id.tv_title); tvwarning = (textview) mlayout.findviewbyid(r.id.tv_warning); tvinfo = (textview) mlayout.findviewbyid(r.id.tv_info); btncancel = (button) mlayout.findviewbyid(r.id.btn_cancel); btnconfirm = (button) mlayout.findviewbyid(r.id.btn_confirm); } /** * 设置 dialog 标题 */ public builder settitle(string title) { tvtitle.settext(title); tvtitle.setvisibility(view.visible); return this; } /** * 设置 warning */ public builder setwarning(string waring) { tvwarning.settext(waring); if (waring == null || waring.equals("")) { tvwarning.setvisibility(view.gone); } return this; } /** * 设置 info */ public builder setinfo(string message) { tvinfo.settext(message); return this; } /** * 设置取消按钮文字和监听 */ public builder setbuttoncancel(string text, view.onclicklistener listener) { btncancel.settext(text); mbuttoncancelclicklistener = listener; return this; } /** * 设置确认按钮文字和监听 */ public builder setbuttonconfirm(string text, view.onclicklistener listener) { btnconfirm.settext(text); mbuttonconfirmclicklistener = listener; return this; } public customdialog create() { btncancel.setonclicklistener(new android.view.view.onclicklistener() { @override public void onclick(view view) { mdialog.dismiss(); mbuttoncancelclicklistener.onclick(view); } }); btnconfirm.setonclicklistener(new android.view.view.onclicklistener() { @override public void onclick(view view) { mdialog.dismiss(); mbuttonconfirmclicklistener.onclick(view); } }); mdialog.setcontentview(mlayout); mdialog.setcancelable(true); mdialog.setcanceledontouchoutside(false); return mdialog; } } }
2、定义customdialo布局文件:dialog_custom
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <linearlayout android:layout_width="300dp" android:layout_height="wrap_content" android:background="@drawable/rect_s_rounded_white" android:orientation="vertical"> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="@dimen/margin_10" android:layout_marginbottom="@dimen/margin_10" android:gravity="center" android:orientation="vertical"> <textview android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="@dimen/size_18" android:textstyle="bold" /> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="@dimen/padding_10"> <textview android:id="@+id/tv_warning" android:layout_width="match_parent" android:layout_height="wrap_content" android:textcolor="@android:color/holo_red_dark" android:textsize="@dimen/size_14" /> <textview android:id="@+id/tv_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="@dimen/margin_10" android:textcolor="@android:color/black" android:textsize="@dimen/size_14" /> </linearlayout> <linearlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="@dimen/margin_10" android:layout_marginbottom="@dimen/margin_10" android:gravity="center" android:orientation="horizontal" android:padding="@dimen/padding_10"> <button android:id="@+id/btn_cancel" android:layout_width="110dp" android:layout_height="40dp" android:layout_marginright="25dp" android:background="@drawable/button_gray_l_rounded_selector" android:textcolor="@android:color/black" android:textsize="@dimen/size_14" /> <button android:id="@+id/btn_confirm" android:layout_width="110dp" android:layout_height="40dp" android:background="@drawable/button_green_l_rounded_selector" android:textcolor="@android:color/white" android:textsize="@dimen/size_14" /> </linearlayout> </linearlayout> </linearlayout>
3、定义customdialog样式文件:custom_dialog
<style name="custom_dialog" parent="@android:style/theme.dialog"> <item name="android:windowframe">@null</item> <item name="android:windowisfloating">true</item> <item name="android:windowistranslucent">true</item> <item name="android:windownotitle">true</item> <item name="android:background">#00000000</item> <item name="android:windowbackground">@color/transparent</item> <item name="android:backgrounddimenabled">true</item> </style>
4、定义其中按钮样式:button_green_l_rounded_selector和button_gray_l_rounded_selector
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <stroke android:color="@android:color/transparent" android:width="0dp"></stroke> <gradient android:angle="180" android:endcolor="@color/button_green" android:startcolor="@color/button_green"></gradient> <corners android:radius="50dp"></corners> </shape> </item> <item android:state_focused="true"> <shape android:shape="rectangle"> <stroke android:color="@android:color/transparent" android:width="0dp"></stroke> <gradient android:angle="180" android:endcolor="@color/button_green" android:startcolor="@color/button_green"></gradient> <corners android:radius="50dp"></corners> </shape> </item> <item android:state_pressed="false"> <shape android:shape="rectangle"> <stroke android:color="@android:color/transparent" android:width="0dp"></stroke> <gradient android:angle="0" android:endcolor="@color/button_green" android:startcolor="@color/button_green"></gradient> <corners android:radius="50dp"></corners> </shape> </item> <item android:state_focused="false"> <shape android:shape="rectangle"> <stroke android:color="@android:color/transparent" android:width="0dp"></stroke> <gradient android:angle="0" android:endcolor="@color/button_green" android:startcolor="@color/button_green"></gradient> <corners android:radius="50dp"></corners> </shape> </item> </selector>
5、具体使用
private void showdialog() { onclicklistener oncancelclicklistener = new onclicklistener() { @override public void onclick(view v) { mydialog.showtoast(warehouseaddactivity.this, "取消"); } }; onclicklistener onconfimclicklistener = new onclicklistener() { @override public void onclick(view v) { mydialog.showtoast(warehouseaddactivity.this, "确认"); } }; showinfodialog("", "请点击确认进行操作", "取消", oncancelclicklistener, "确认", onconfimclicklistener); } protected void showinfodialog(string waring, string info, string canceltext, onclicklistener cancelonclick, string confirmtext, onclicklistener confirmonclick) { customdialog.builder builder = new customdialog.builder(this); builder.settitle("提示"); builder.setwarning(waring); builder.setinfo(info); builder.setbuttoncancel(canceltext, cancelonclick); builder.setbuttonconfirm(confirmtext, confirmonclick); customdialog customdialog = builder.create(); customdialog.show(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。