安卓实现底部弹出框/自定义对话框
2014-10-24 21:34
197 查看
本文仅供学习参考,如有雷同,纯属巧合
之前写的一个项目需要实现类似微信以前版本的注销提示框的效果,所以就到网上找了一下,发现大家的方法各有所长,
我自己整理了一个方法,在这里做个笔记,如果这篇文章被你搜到了,那就参考一下吧,共同学习,大家评论见。
受这篇文章的启发→ 弹出窗口的两种实现方式 PopupWindow 和 Activity
所以看本文前,还是建议先看看上面的帖子。
下面开始正题
先说下思路:要自定义dialog的样式,我想到的方法就是不用dialog的setTitle(),setMessage等方法,因为那样dialog的样式就又成了Android自带样式了,把dialog给window,然后用window加载布局,这个布局就是对话框的布局了,这个布局什么样,对话框弹出来就是什么样。
还有就是,如果只用AlertDialog的话,加载出来的布局宽度是不会充满屏幕宽的,两边会有空隙,这是因为Dialog会有一个默认的样式,用window的话可以设置dialog的宽高,(个人认为底部弹出的对话框两边有空隙不好看,所以用这个方法解决了,如果你不要求这个,可以只实例化一个AlertDialog就可以了)
接下来是代码,仅仅一个方法就够了:
贴上两个动画效果的文件和style样式:
push_bottom_in.xml
push_bottom_out.xml
总结:上面的那篇帖子用Activity当弹出窗口的方法,不得不说方法非常新颖,但是有个缺点,就是每用一个对话框都要写一个类,而且还要写一个布局,这样很费事。而且如果要是对话框中有EditText时,Activity之间获取变量不太方便……
我这种方法如果用到弹出框的需求多并且样式类似的话,可以加载同一个布局,然后对布局里的TextView和Button设置内容就可以了,较为灵活。
附Demo下载→安卓实现底部弹出框/自定义对话框
之前写的一个项目需要实现类似微信以前版本的注销提示框的效果,所以就到网上找了一下,发现大家的方法各有所长,
我自己整理了一个方法,在这里做个笔记,如果这篇文章被你搜到了,那就参考一下吧,共同学习,大家评论见。
受这篇文章的启发→ 弹出窗口的两种实现方式 PopupWindow 和 Activity
所以看本文前,还是建议先看看上面的帖子。
下面开始正题
先说下思路:要自定义dialog的样式,我想到的方法就是不用dialog的setTitle(),setMessage等方法,因为那样dialog的样式就又成了Android自带样式了,把dialog给window,然后用window加载布局,这个布局就是对话框的布局了,这个布局什么样,对话框弹出来就是什么样。
还有就是,如果只用AlertDialog的话,加载出来的布局宽度是不会充满屏幕宽的,两边会有空隙,这是因为Dialog会有一个默认的样式,用window的话可以设置dialog的宽高,(个人认为底部弹出的对话框两边有空隙不好看,所以用这个方法解决了,如果你不要求这个,可以只实例化一个AlertDialog就可以了)
接下来是代码,仅仅一个方法就够了:
private void showDialog() { final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) .create(); dialog.show(); Window window = dialog.getWindow(); // 设置布局 window.setContentView(R.layout.alertdialog); // 设置宽高 window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); // 设置弹出的动画效果 window.setWindowAnimations(R.style.AnimBottom); // 设置监听 Button ok = (Button) window.findViewById(R.id.btn_ok); Button cancel = (Button) window.findViewById(R.id.btn_cancel); ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog.cancel(); } }); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog.cancel(); } }); // 因为我们用的是windows的方法,所以不管ok活cancel都要加上“dialog.cancel()”这句话, // 不然有程序崩溃的可能,仅仅是一种可能,但我们还是要排除这一点,对吧? // 用AlertDialog的两个Button,即使监听里什么也不写,点击后也是会吧dialog关掉的,不信的同学可以去试下 }
贴上两个动画效果的文件和style样式:
push_bottom_in.xml
<?xml version="1.0" encoding="utf-8"?> <!-- 上下滑入式 --> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromYDelta="50%p" android:toYDelta="0" /> </set>
push_bottom_out.xml
<?xml version="1.0" encoding="utf-8"?> <!-- 上下滑入式 --> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromYDelta="0" android:toYDelta="50%p" /> </set>Style样式(写在values文件夹下style.xml文件里):
<style name="AnimBottom" parent="@android:style/Animation"> <item name="android:windowEnterAnimation">@anim/push_bottom_in</item> <item name="android:windowExitAnimation">@anim/push_bottom_out</item> </style>
总结:上面的那篇帖子用Activity当弹出窗口的方法,不得不说方法非常新颖,但是有个缺点,就是每用一个对话框都要写一个类,而且还要写一个布局,这样很费事。而且如果要是对话框中有EditText时,Activity之间获取变量不太方便……
我这种方法如果用到弹出框的需求多并且样式类似的话,可以加载同一个布局,然后对布局里的TextView和Button设置内容就可以了,较为灵活。
附Demo下载→安卓实现底部弹出框/自定义对话框
相关文章推荐
- 安卓开发:自定义PopupWindow,实现模仿iOS底部弹出菜单
- 自定义Dialog对话框并实现从底部弹出的动画效果
- Android安卓用Dialog对话框简单并且完美实现popupWindow底部弹出效果,有动画效果
- jquery实现弹出自定义对话框,父页面变灰
- 安卓 实现网易云音乐底部播放栏效果之使用自定义BaseActivity实现 上
- Android编程实现AlertDialog自定义弹出对话框的方法示例
- Android底部对话框的实现(BottomSheet,自定义Dialog)
- 怎样在安卓中实现在锁屏状态下弹出对话框,并可以震动和铃声,就像闹钟似的?
- 用PopupWindow,Activity以及Dialog不同方式实现从底部弹出对话框
- Android实现底部对话框BottomDialog弹出实例代码
- 安卓 实现网易云音乐底部播放栏效果之使用自定义BaseActivity实现 下
- 自定义 DialogFragment 实现底部弹出 dialog
- 怎样在安卓中实现在锁屏状态下弹出对话框,并可以震动和铃声,就像闹钟似的?
- Android 控件——利用Dialog实现底部弹出对话框
- 实现自定义的dialog(类似QQ点击退出后弹出的对话框)
- 通过纯JS和css实现自定义弹出对话框
- 怎样在安卓中实现在锁屏状态下弹出对话框,并可以震动和铃声,就像闹钟似的?
- android自定义底部弹出对话框
- Android中Dialog实现自定义弹出对话框
- Android实现底部弹出的对话框功能