不得不说,android自带的弹出框真心丑,而且还不好用,接下来介绍几种自定义的弹出框,并且源码防到附件里面。
Android的弹框按照我的理解,至少有两种,一种是自己写个弹框,继承Dialog借口,一种是写一个非全屏的Activity,样式上来讲,应该是后者更好看一些吧。
上面直接上代码:
dialog_normal_layout.xml
style.xml
使用 :
Android的弹框按照我的理解,至少有两种,一种是自己写个弹框,继承Dialog借口,一种是写一个非全屏的Activity,样式上来讲,应该是后者更好看一些吧。
上面直接上代码:
dialog_normal_layout.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:orientation="vertical" android:padding="20.0dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/bg_bombbox" android:orientation="vertical" > <TextView android:id="@+id/title" style="@style/text_18_ffffff" android:layout_width="fill_parent" android:layout_height="40.0dip" android:gravity="center" android:text="@string/title_alert" android:visibility="visible" /> <TextView android:id="@+id/message" style="@style/text_16_666666" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left|center" android:lineSpacingMultiplier="1.5" android:minHeight="120.0dip" android:paddingBottom="15.0dip" android:paddingLeft="20.0dip" android:paddingRight="20.0dip" android:paddingTop="15.0dip" /> <View android:layout_width="fill_parent" android:layout_height="1.0px" android:background="#ffd0d0d0" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="60.0dip" android:layout_gravity="bottom" android:background="@drawable/dialog_bottom_bg" android:gravity="center" android:orientation="horizontal" > <Button android:id="@+id/positiveButton" style="@style/text_15_ffffff_sdw" android:layout_width="114.0dip" android:layout_height="40.0dip" android:background="@drawable/btn_ok_selector" android:gravity="center" android:text="@string/ok" /> <Button android:id="@+id/negativeButton" style="@style/text_15_666666_sdw" android:layout_width="114.0dip" android:layout_height="40.0dip" android:layout_marginLeft="20.0dip" android:background="@drawable/btn_cancel_selector" android:gravity="center" android:text="@string/cancel" /> </LinearLayout> </LinearLayout> </FrameLayout>
style.xml
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppBaseTheme" parent="android:Theme.Light"></style> <style name="AppTheme" parent="AppBaseTheme"></style> <style name="text_18_ffffff"> <item name="android:textSize">18.0dip</item> <item name="android:textColor">#ffffffff</item> </style> <style name="text_16_666666"> <item name="android:textSize">16.0dip</item> <item name="android:textColor">#ff666666</item> </style> <style name="sdw_white"> <item name="android:shadowColor">#7fffffff</item> <item name="android:shadowDx">0.0</item> <item name="android:shadowDy">0.65</item> <item name="android:shadowRadius">1.0</item> </style> <style name="sdw_79351b"> <item name="android:shadowColor">#ff79351b</item> <item name="android:shadowDx">0.0</item> <item name="android:shadowDy">1.0</item> <item name="android:shadowRadius">1.0</item> </style> <style name="text_15_ffffff_sdw" parent="@style/sdw_79351b"> <item name="android:textSize">15.0dip</item> <item name="android:textColor">#ffffffff</item> </style> <style name="text_15_666666_sdw" parent="@style/sdw_white"> <item name="android:textSize">15.0dip</item> <item name="android:textColor">#ff666666</item> </style> <style name="Dialog" parent="android:style/Theme.Dialog"> <item name="android:background">#00000000</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> </style> </resources>
package com.example.privatedialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class CustomDialog extends Dialog { public CustomDialog(Context context) { super(context); } public CustomDialog(Context context, int theme) { super(context, theme); } public static class Builder { private Context context; private String title; private String message; private String positiveButtonText; private String negativeButtonText; private View contentView; private DialogInterface.OnClickListener positiveButtonClickListener; private DialogInterface.OnClickListener negativeButtonClickListener; public Builder(Context context) { this.context = context; } public Builder setMessage(String message) { this.message = message; return this; } /** * Set the Dialog message from resource * * @param title * @return */ public Builder setMessage(int message) { this.message = (String) context.getText(message); return this; } /** * Set the Dialog title from resource * * @param title * @return */ public Builder setTitle(int title) { this.title = (String) context.getText(title); return this; } /** * Set the Dialog title from String * * @param title * @return */ public Builder setTitle(String title) { this.title = title; return this; } public Builder setContentView(View v) { this.contentView = v; return this; } /** * Set the positive button resource and it's listener * * @param positiveButtonText * @return */ public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = (String) context .getText(positiveButtonText); this.positiveButtonClickListener = listener; return this; } public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = positiveButtonText; this.positiveButtonClickListener = listener; return this; } public Builder setNegativeButton(int negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = (String) context .getText(negativeButtonText); this.negativeButtonClickListener = listener; return this; } public Builder setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = negativeButtonText; this.negativeButtonClickListener = listener; return this; } public CustomDialog create() { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // instantiate the dialog with the custom Theme final CustomDialog dialog = new CustomDialog(context,R.style.Dialog); View layout = inflater.inflate(R.layout.dialog_normal_layout, null); dialog.addContentView(layout, new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); // set the dialog title ((TextView) layout.findViewById(R.id.title)).setText(title); // set the confirm button if (positiveButtonText != null) { ((Button) layout.findViewById(R.id.positiveButton)) .setText(positiveButtonText); if (positiveButtonClickListener != null) { ((Button) layout.findViewById(R.id.positiveButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { positiveButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.positiveButton).setVisibility( View.GONE); } // set the cancel button if (negativeButtonText != null) { ((Button) layout.findViewById(R.id.negativeButton)) .setText(negativeButtonText); if (negativeButtonClickListener != null) { ((Button) layout.findViewById(R.id.negativeButton)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { negativeButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.negativeButton).setVisibility( View.GONE); } // set the content message if (message != null) { ((TextView) layout.findViewById(R.id.message)).setText(message); } else if (contentView != null) { // if no message set // add the contentView to the dialog body ((LinearLayout) layout.findViewById(R.id.message)) .removeAllViews(); ((LinearLayout) layout.findViewById(R.id.message)).addView( contentView, new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } dialog.setContentView(layout); return dialog; } } }
使用 :
CustomDialog.Builder builder = new CustomDialog.Builder(this); builder.setMessage("这个就是自定义的提示框"); builder.setTitle("提示"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //设置你的操作事项 } }); builder.setNegativeButton("取消", new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show();
- PrivateDialog.zip (1.5 MB)
- 下载次数: 4
发表评论
-
2048源码(核心算法有,缺少几个anctionbar,以后补上)
2014-09-25 13:22 15292048游戏基本上有四部分组成, 1:主activity,包含 ... -
android动画效果
2014-09-24 18:06 1146前几天弄alertdialog和popupwindow的时候, ... -
AlertDialog和PopupWindow
2014-09-18 15:44 1900区别:AlertDialog是非阻塞式对话框:AlertDia ... -
基础篇--resources资源
2014-09-12 15:18 539最近一直在做java开发,偶尔敲点android代码,突然发现 ... -
多点触摸(图片缩放为例)
2014-09-01 17:22 656多点触摸的事件跟单点是大同小异的,上个图片缩放的代码,供大家参 ... -
Toast的多种样式(附带Notification)
2014-09-01 13:48 939Toast以前用的时候一直以为只有文字提示,偶然得知也有多种样 ... -
Android Adapter详解(2)
2014-08-15 14:05 10以前Adapter一直用的不是太好,经过长时间的浸淫,现在可以 ... -
BroadcastReceiver简介
2014-08-14 16:27 674BroadcastReceiver作为四大 ... -
关于Android的Service
2014-08-14 13:57 463说起来真是羞愧,以前手机经常开机的时候,不会有任何QQ消息通知 ... -
在开发过程中易出的错误
2014-08-13 16:53 4161:如果继承ListActivity,那么layout中必须有 ... -
多媒体的浅尝辄止
2014-08-12 15:57 536下面简单讲几种Android的多媒体技术,音频,视频,摄像头, ... -
Sqlite无脑使用
2014-08-11 14:56 889不会sqlite的人再也不用愁了,无脑使用,只要会粘贴复制就O ... -
android几种数据存储方式
2014-08-11 10:45 712android数据存储方式 1:SharedPreferen ... -
SQLiteOpenHelper和ContentProvider区别
2014-08-06 15:08 1440Android中操作数据库主要有两种方法:使用SQLiteOp ... -
xml文件解析SAX
2014-08-05 13:45 504xml文件解析:xml文件解析有四种方式, 1.DOM生成和解 ... -
Android不常用代码(1)
2014-07-31 18:07 543目录 1:Webview 2:js交互 1:Web ... -
系统窗口的调用
2014-07-31 15:46 471直接上代码吧,intent进行调用 @Override ... -
fragment简单实用及数据传递(2)
2014-07-31 15:13 2550FragmentTransaction 进行数据传递 imp ... -
ActionBar简介
2014-07-31 10:47 714Action bar是一个标识应用程序和用户位置的窗口功能,并 ... -
fragment简单实用及数据传递(1)
2014-07-30 16:29 738Fragment的使用相关 使用Fragment时,需要继承 ...
相关推荐
本篇将深入探讨Android弹出框的使用,包括它的类型、创建方法以及自定义实现。 1. **弹出框类型** - AlertDialog:标准的弹出框,包含标题、内容和按钮区域。 - AlertDialog.Builder:用于构建AlertDialog的对象...
在Android开发中,用户体验是至关重要的,而"android弹出框和加载等待"就是提升用户体验的重要手段之一。本文将深入探讨这两个概念,并提供实现自定义弹出框和加载等待效果的方法。 首先,让我们来理解一下Android...
总之,“Android自定义弹出框实现(修改版)完整实例源码”提供了一种自定义Android弹出框的实现方式,通过学习和理解这个实例,开发者能够更好地掌握自定义Dialog的设计和实现,提升应用的界面美观度和用户体验。
本文将深入探讨如何在Android中实现丰富的弹出框动画效果,以"android弹出框动画效果"为主题,结合"NiftyModalDialogEffects"这个压缩包中的示例,我们将详细解析Android Dialog的动画设计与实现。 首先,了解...
总结起来,实现一个带有ListView的Android弹出框,主要步骤包括创建Dialog布局、定义数据模型和适配器、初始化Dialog、设置样式和动画以及处理点击事件。通过这些步骤,你可以为用户构建一个交互式且功能丰富的弹出...
本项目“android自定义弹出框实现(修改版)”是一个针对原生Android弹出框进行定制化改造的例子,主要涉及Java编程语言。下面将详细讲解这个项目的重点知识点。 1. **自定义对话框类**: 在Android中,通常使用`...
这篇博客“有关于android弹出框”可能深入探讨了如何在Android应用中创建和使用自定义对话框,以及相关的源码分析。以下是关于Android弹出框的一些关键知识点: 1. **AlertDialog的构建**: Android提供了...
一个Android登录界面的制作范例,以Android dialog方式实现的弹出式登录框,并包括了帐号密码保存、加密算法等模块源码。本登录源码将对密码信息进行AES加密算法加密后保存,有些功能需要服务器配合才能看到,比如...
以下是如何构建和显示弹出框的代码: ```java // 创建一个AlertDialog.Builder实例 AlertDialog.Builder builder = new AlertDialog.Builder(this); // 设置对话框的布局 LayoutInflater inflater = ...
在使用UC-WebBrowser时,你会发现它的弹出菜单跟系统自带的菜单不一样。它实现更多菜单选项的显示和分栏。其实,它的本身是PopupWindow或者是AlertDialog对话框,在里面添加两个GridView控件,一个是菜单标题栏,一...
以上就是创建一个自定义Android弹出框的基本过程,其中`MyCommonDialog`可能是你在项目中创建的一个自定义Dialog类,包含了上述步骤的实现。通过这样的方式,你可以根据自己的设计和业务逻辑,打造出具有独特风格和...
Android炫酷弹出框LemonBubble控件
一个动态的弹出框,可以做动态提示什么的,自定义布局放入就可以。使用非常简单,并且做了性能上的优化,内存占用较小。但是发现个长时间弹出内存会升高,暂未发现原因
1. Android弹出框(Alert Dialog)的概念及重要性: Android中的弹出框是用于提供紧急信息或需要用户确认的简短信息的一种界面元素。它通常覆盖在当前界面之上,用于获得用户输入或显示警告信息。在Android应用开发...
这个例子中的`AlertDialogExample`是一个简单的Activity,点击按钮后会弹出一个`AlertDialog`。通过这个例子,初学者可以了解如何在实际项目中使用`AlertDialog`,并且可以根据需要自定义更多的属性,如图标、背景...
在Android开发中,创建引人注目的用户界面是至关重要的,而弹出框作为与用户交互的一种常见方式,其设计和实现方式直接影响到用户体验。本篇文章将深入探讨如何使用动画来实现一个精美的弹出框,类似易信应用中的...
在Android应用开发中,创建一个类似QQ的底部弹出框选择头像的功能涉及到多个关键知识点。这个功能允许用户选择头像,既可以打开相机拍摄新照片,也可以从本地图库选取已有图片,并提供图像剪切功能以调整图片大小。...