- 浏览: 361548 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
nglxl:
点赞啊,必须点赞!!深度好文,解决了困扰我多年的疑惑。
tcp 长连接与短连接 -
cofftech:
opengl源码http://www.eyesourcecod ...
OPenGL ES 关键API小结 -
mail_j:
不是很好用,很多情况都不能处理 1、没有区分关键字的大小写2、 ...
Java解析sql语句,分析出调用到的所有表 -
a455642158:
就算监听到变成了cmwap还不行,还得监听网络连接状态Stat ...
android APN切换cmwap实现 -
xuhl1022:
看了您的android 4篇 浏览器二次开发,感触颇深,写的很 ...
Android浏览器Browser二次开发(四)浏览器中的APN切换
Android中的弹出框在被点击时, 无论点击哪个按钮都会关闭窗口。 但是有的情况下我们不需要立即关闭窗口。下面的情况是弹出框中要求用户输入文件名, 并在点击确定时检查文件名的合法性, 不合法则提示用户重新输入, 弹出框要保持在界面上。 点击取消时弹出框消失。 这里通过对控件的反射来实现:
/**our button handler**/
private ButtonHandler bHandler;
//pop up dialog with own button handler
private void popUpDialog(AlertDialog dialog) {
/*
* alert dialog's default handler will always close dialog whenever user
* clicks on which button. we have to replace default handler with our
* own handler for blocking close action.
* Reflection helps a lot.
*/
try {
Field field = dialog.getClass().getDeclaredField("mAlert");
field.setAccessible(true);
//retrieve mAlert value
Object obj = field.get(dialog);
field = obj.getClass().getDeclaredField("mHandler");
field.setAccessible(true);
//replace mHandler with our own handler
field.set(obj, bHandler);
} catch (SecurityException e) {
Debug.error(e.getMessage());
} catch (NoSuchFieldException e) {
Debug.error(e.getMessage());
} catch (IllegalArgumentException e) {
Debug.error(e.getMessage());
} catch (IllegalAccessException e) {
Debug.error(e.getMessage());
}
//we can show this dialog now.
dialog.show();
}
/*
* define our own button handler, do not deal with dismiss message.
*/
class ButtonHandler extends Handler {
private WeakReference<DialogInterface> mDialog;
public ButtonHandler(DialogInterface dialog) {
mDialog = new WeakReference<DialogInterface>(dialog);
}
public void handleMessage(Message msg) {
switch (msg.what) {
case DialogInterface.BUTTON_POSITIVE:
case DialogInterface.BUTTON_NEGATIVE:
case DialogInterface.BUTTON_NEUTRAL:
((DialogInterface.OnClickListener) msg.obj).onClick(mDialog
.get(), msg.what);
break ;
}
}
}
然后创建一个AlertDialog时如下去调用:
//create dialog
mDialog = new AlertDialog.Builder(mContext)
.setView(selectImageView)
.setNegativeButton(android.R.string.cancel, mOnDialogClickListener)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
//check input file name
if (isValidFileName(fileNameInput.getText().toString())) {
String fileName = fileNameInput.getText().toString().trim();
mediaList.get(0).setName(fileName);
saveMedia(mediaList);
dialog.dismiss();
} else {
Toast.makeText(mContext, R.string.invalid_file_name, 1500).show();
}
}
}).create();
mOnDialogClickListener用来处理关闭窗口事件:
/*
* cancel dialog listener
*/
OnClickListener mOnDialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int buttonId) {
switch (buttonId) {
case DialogInterface.BUTTON_NEGATIVE:
dialog.dismiss();
break;
case DialogInterface.BUTTON_POSITIVE:
break;
}
}
};
这种通过反射的方法也是从网上学来的, 不知原创是谁了。 弱引用的目的是方便垃圾回收, 这里的引用只是为了设置下Dialog里面的控件, 用完以后以后就不再需要持有这个句柄了。 使用弱引用就不会影响到原来对这个控件的垃圾回收过程。
/**our button handler**/
private ButtonHandler bHandler;
//pop up dialog with own button handler
private void popUpDialog(AlertDialog dialog) {
/*
* alert dialog's default handler will always close dialog whenever user
* clicks on which button. we have to replace default handler with our
* own handler for blocking close action.
* Reflection helps a lot.
*/
try {
Field field = dialog.getClass().getDeclaredField("mAlert");
field.setAccessible(true);
//retrieve mAlert value
Object obj = field.get(dialog);
field = obj.getClass().getDeclaredField("mHandler");
field.setAccessible(true);
//replace mHandler with our own handler
field.set(obj, bHandler);
} catch (SecurityException e) {
Debug.error(e.getMessage());
} catch (NoSuchFieldException e) {
Debug.error(e.getMessage());
} catch (IllegalArgumentException e) {
Debug.error(e.getMessage());
} catch (IllegalAccessException e) {
Debug.error(e.getMessage());
}
//we can show this dialog now.
dialog.show();
}
/*
* define our own button handler, do not deal with dismiss message.
*/
class ButtonHandler extends Handler {
private WeakReference<DialogInterface> mDialog;
public ButtonHandler(DialogInterface dialog) {
mDialog = new WeakReference<DialogInterface>(dialog);
}
public void handleMessage(Message msg) {
switch (msg.what) {
case DialogInterface.BUTTON_POSITIVE:
case DialogInterface.BUTTON_NEGATIVE:
case DialogInterface.BUTTON_NEUTRAL:
((DialogInterface.OnClickListener) msg.obj).onClick(mDialog
.get(), msg.what);
break ;
}
}
}
然后创建一个AlertDialog时如下去调用:
//create dialog
mDialog = new AlertDialog.Builder(mContext)
.setView(selectImageView)
.setNegativeButton(android.R.string.cancel, mOnDialogClickListener)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int arg1) {
//check input file name
if (isValidFileName(fileNameInput.getText().toString())) {
String fileName = fileNameInput.getText().toString().trim();
mediaList.get(0).setName(fileName);
saveMedia(mediaList);
dialog.dismiss();
} else {
Toast.makeText(mContext, R.string.invalid_file_name, 1500).show();
}
}
}).create();
mOnDialogClickListener用来处理关闭窗口事件:
/*
* cancel dialog listener
*/
OnClickListener mOnDialogClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int buttonId) {
switch (buttonId) {
case DialogInterface.BUTTON_NEGATIVE:
dialog.dismiss();
break;
case DialogInterface.BUTTON_POSITIVE:
break;
}
}
};
评论
4 楼
m331006
2011-08-16
楼主,为什么我对着写都不行的呢。。点击按钮时还是消失了。。。popUpDialog方法应该在哪里调用的??楼主看到了回我一下吧。。。急呢。谢谢了。
3 楼
bluecountry
2011-08-12
膜拜了楼主的大作之后,果断选择自定义对话框...
就2个按钮 不用那么纠结
当然了 思路还是要学习一下
就2个按钮 不用那么纠结
当然了 思路还是要学习一下
2 楼
seya
2011-04-07
ET焖猪仔 写道
学些了,楼主是怎么想到用反射的~ ?private WeakReference<DialogInterface> mDialog; 为什么这里用到弱引用? 期待解答~
这种通过反射的方法也是从网上学来的, 不知原创是谁了。 弱引用的目的是方便垃圾回收, 这里的引用只是为了设置下Dialog里面的控件, 用完以后以后就不再需要持有这个句柄了。 使用弱引用就不会影响到原来对这个控件的垃圾回收过程。
1 楼
ET焖猪仔
2011-03-29
学些了,楼主是怎么想到用反射的~ ?private WeakReference<DialogInterface> mDialog; 为什么这里用到弱引用? 期待解答~
发表评论
-
基于Java NIO的手机答题游戏开发
2014-03-31 17:59 1785先上个游戏截图: 豌豆荚地址: http://apps.w ... -
enable android deviceconnection under linux
2013-04-24 15:45 1004开发环境搭建完毕,Eclipse,Java,ADT都已经折腾 ... -
set CCache for building android source code
2013-04-24 15:14 1191Setting up ccache You can opti ... -
android 源码下载403 forbidden, 406 not acceptable 错误
2013-04-24 08:46 2453解决方法 1. 浏览器登录https://android.g ... -
ubuntu11.10 编译android4.0 错处
2013-04-08 21:45 1226今天使用ubuntu11.10编译android4.0出现以下 ... -
常用WebService列表
2013-01-31 23:22 2638快递查询接口 http://webservice.36wu.c ... -
startActivityForResult 无响应问题
2013-01-24 13:57 3853今天开发遇到了个问题, 就是从一个Activity中使用sta ... -
Android中仿新浪微博刷新列表
2012-11-22 17:35 7345大家看到新浪微博中的列表往下拉的时候, 头部出现正在刷新,然后 ... -
Grid调整间距
2012-09-29 08:52 1747今天使用GridView, 发现点中某一Item时选中部分的背 ... -
android gallery和Animation组合使用, 看美女美图
2012-09-11 21:01 4450今天主要探究Gallery和Animation的使用。 制作一 ... -
Android执行 shell command
2012-03-24 17:00 7257Android执行shell命令 一、方法 1. /* ... -
BBBBBB111
2012-03-23 11:42 10陈波: 本周:代码review,解决findbugs中bug以 ... -
MonkeyTestError
2012-03-21 10:15 903-20 21:36:42.439 W/dalvikvm( ... -
INSTALL_FAILED_OLDER_SDK ERROR
2012-03-12 15:52 4471Install APK with adb: $ platfo ... -
4.0源码编译问题
2012-03-07 17:12 31581、fatal error: GL/glx.h: No suc ... -
4.0 编译apk中无classes.dex
2012-03-07 17:11 3964下载完android 4.0代码,模拟器里面的gallery不 ... -
Android 4.0源码编译错误
2012-03-05 10:19 2582UNEXPECTED TOP-LEVEL EXCEPTION: ... -
AndroidLockScreenDemo
2012-02-18 15:54 994锁屏解锁的成功案例。 -
G14 root权限获取
2012-02-13 23:36 2870HTC G14 ROOT权限获取后就能删除系统自带的程序,相信 ... -
锁屏d ds
2011-12-15 00:49 903private final IDevicePolicyMana ...
相关推荐
一个用于控制弹出框从无到有平滑出现,另一个则相反,让弹出框平滑消失。在动画过程中,我们可以改变PopupWindow的宽度、高度或透明度来实现不同的动画效果。 4. **监听器**:为动画设置开始和结束监听器,以便在...
此外,还可以通过编程逻辑控制弹出框的显示和消失,如在特定操作后自动弹出,或在用户满足某些条件时消失。 在设计模拟弹出框时,应考虑以下几个原则: 1. 清晰性:确保弹出框的内容易于理解和操作,避免过于复杂或...
在Android应用开发中,创建一个类似美团购物车的弹出框是一种常见的需求,它能够提供用户友好的交互体验。这个“Android仿美团弹出框购物车”Demo是为开发者提供了一个可以直接导入Android Studio (AS)并快速查看...
在Android开发中,为了提供与iOS相似的用户体验,开发者经常需要创建具有圆角设计的弹出框或提示框。这个“仿iOS圆角弹出框”项目,正如其标题所暗示的,是针对这一需求的一个解决方案。通过实现这样的组件,我们...
当用户点击弹出框外的区域或者按下返回键时,弹出框消失。 总的来说,`react-native-xmodal`库为我们提供了在React Native中实现类似Android `DialogFragment`功能的能力,通过简单的配置和使用,我们可以快速构建...
本文将深入探讨如何在Android平台上创建一个仿iOS弹出框效果,包括底部弹出的日期选择器和地址选择器。我们将讨论相关的UI组件、布局设计以及事件处理等方面的知识点。 首先,iOS的弹出框效果通常被称为“Action ...
"Android仿ios弹出框AndroidshowDialog库"是专为Android平台设计的一个库,其目标是模仿iOS风格的弹出框,以实现更加统一且具有吸引力的用户界面。这个库不仅简化了开发过程,还提供了高度定制的可能性,特别是在...
开发者可以控制弹出框的大小、形状、动画效果、内容展示以及交互行为。在Android中,可以利用DialogFragment或者AlertDialog实现自定义对话框;在iOS中,可以使用UIAlertController配合自定义视图。对于JavaScript...
我们可以为弹出框的显示和消失添加动画效果,比如淡入淡出、滑动进出等,提升应用的交互体验。 在实现这些功能时,我们需要注意以下几点: 1. 数据持久化:如果用户在发表说说的过程中按下返回键,应询问用户是否...
在Android应用开发中,模拟微信朋友圈的点赞和评论弹出框功能是一项常见的需求,它涉及到UI设计、事件处理以及数据管理等多个方面的技术。下面将详细解释实现这一功能所需的关键知识点。 1. **自定义对话框(Custom...
PopupWindow是自定义程度最高的弹出框,开发者可以直接控制其布局、大小和位置。它可以用来创建各种复杂的弹出效果,如自定义菜单、工具提示等。 7. **ProgressDialog/ProgressBar** ProgressDialog通常用于显示...
- **移动应用**:移动平台如Android和iOS也有自己的通知系统,可以模拟右下角弹出框的效果。 3. **应用场景**: - **系统通知**:例如软件更新提示、系统错误报告、消息提醒等。 - **用户引导**:新手引导、功能...
2. **动画效果**:为了提供良好的用户体验,弹出框的出现和消失通常会伴随一定的动画效果,如淡入淡出、平滑滑动等。这些效果可以通过编程实现,例如Android的`ObjectAnimator`或iOS的`UIViewAnimationOptions`。 3...
4. **动画效果**:iOS弹出框在显示和消失时通常伴有平滑的动画效果,增加用户体验的流畅感。 要实现“仿ios弹出框效果”,开发者需要考虑以下技术点: 1. **布局设计**:在Android中,可以使用自定义对话框...
例如,你可以研究其中的布局文件是如何定义弹出框的结构,以及Java或Kotlin代码是如何控制弹出框的行为和动画。 四、最佳实践 1. **合理选择动画**:根据应用场景选择合适的弹出动画,避免过于复杂导致性能下降。 ...
总的来说,实现“Android studio实现点击按钮弹出气泡”这一功能,需要掌握Android应用开发的基本概念,包括布局设计、事件处理、自定义View、动画和触摸事件等。通过学习和实践,开发者可以创建出富有创意且用户...
为了让弹出框显示和消失更有动画感,可以使用`AnimationUtils.loadAnimation()`加载动画资源,然后通过`setAnimationStyle()`设置给`PopupWindow`。 5. **生命周期管理**: `PopupWindow`不是Activity,因此没有...
提到的“您可能感兴趣的文章”提到了更多关于Android弹出框的实现,如使用`Dialog`、`PopupWindow`以及各种样式的弹出框,还有带输入功能的弹出框,这些都是在实际开发中常见的弹出框实现方式。 总结起来,这个...
对于"不想在桌面使用"的情况,可以通过监听Activity的生命周期回调来控制悬浮框体的显示和隐藏。例如,在Activity的`onResume()`方法中显示悬浮框体,在`onPause()`或`onStop()`方法中移除它。这样,当Activity不再...
在Android开发中,有时我们需要实现一些特殊的视觉效果,比如悬浮框和弹幕效果。这个"Android悬浮框弹幕效果"的示例项目就是一个很好的实践,它涵盖了如何利用`WindowManager`服务来创建浮动窗口,以及如何实现弹幕...