您的位置:首页 > 其它

安卓实现底部弹出框/自定义对话框

2014-10-24 21:34 197 查看
本文仅供学习参考,如有雷同,纯属巧合

之前写的一个项目需要实现类似微信以前版本的注销提示框的效果,所以就到网上找了一下,发现大家的方法各有所长,

我自己整理了一个方法,在这里做个笔记,如果这篇文章被你搜到了,那就参考一下吧,共同学习,大家评论见。

受这篇文章的启发→ 弹出窗口的两种实现方式 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下载→安卓实现底部弹出框/自定义对话框

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: