从底部弹出框
来源:互联网 发布:吸烟有害健康烟盒 知乎 编辑:程序博客网 时间:2024/05/22 15:28
private
void
show1() {
Dialog bottomDialog =
new
Dialog(
this
, R.style.BottomDialog);
View contentView = LayoutInflater.from(
this
).inflate(R.layout.dialog_content_normal,
null
);
bottomDialog.setContentView(contentView);
ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
layoutParams.width = getResources().getDisplayMetrics().widthPixels;
contentView.setLayoutParams(layoutParams);
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
bottomDialog.show();
}
对话框的样式style:
1
2
3
4
<style name=
"BottomDialog"
parent=
"@style/Base.V7.Theme.AppCompat.Light.Dialog"
>
<item name=
"android:windowNoTitle"
>true</item>
<item name=
"android:windowBackground"
>@android:color/
transparent
</item>
</style>
在对话框中的按钮需要MD风格的波纹效果的话,对话框的style的parent需要设定parent="@style/Base.V7.Theme.AppCompat.Light.Dialog",否则没有效果。同时将对话框所在window的标题去掉。android:windowBackground属性一定要设置成透明,否则自定义形状的对话框背景就是默认的白色了。如果不设置为透明,比如我们通常要设置的圆角对话框就没有效果。
对话框显示时从底部进入,关闭时从底部滑出。动画样式:
1
2
3
4
<style name=
"BottomDialog.Animation"
parent=
"Animation.AppCompat.Dialog"
>
<item name=
"android:windowEnterAnimation"
>@anim/translate_dialog_in</item>
<item name=
"android:windowExitAnimation"
>@anim/translate_dialog_out</item>
</style>
tranlate_dialog_in.xml:
1
2
3
4
5
6
7
8
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
translate
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:duration
=
"300"
android:fromXDelta
=
"0"
android:fromYDelta
=
"100%"
android:toXDelta
=
"0"
android:toYDelta
=
"0"
>
</
translate
>
tranlate_dialog_out.xml:
1
2
3
4
5
6
7
8
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
translate
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:duration
=
"300"
android:fromXDelta
=
"0"
android:fromYDelta
=
"0"
android:toXDelta
=
"0"
android:toYDelta
=
"100%"
>
</
translate
>
实现底部对话框的原理就是修改对话框的内容布局contentView的参数,使它的宽度刚好等于屏幕的宽度,并且设置对话框所在Window的gravity属性为bottom。
需要注意的是,上面代码中需要在调用contentView.getLayoutParams()需要在setContentView方法后,否则获取到的LayoutParams为null,当然也可以自己new一个LayoutParams设置给contentView。
如果是要实现底部圆角对话框,原理也相似,只需要给contentView添加一个圆角的背景shape,并减小contentView的宽度给左右两边留一定的距离,同时给底部设置边距。
1
2
3
4
5
6
7
8
9
10
11
12
private
void
show2() {
Dialog bottomDialog =
new
Dialog(
this
, R.style.BottomDialog);
View contentView = LayoutInflater.from(
this
).inflate(R.layout.dialog_content_circle,
null
);
bottomDialog.setContentView(contentView);
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) contentView.getLayoutParams();
params.width = getResources().getDisplayMetrics().widthPixels - DensityUtil.dp2px(
this
, 16f);
params.bottomMargin = DensityUtil.dp2px(
this
, 8f);
contentView.setLayoutParams(params);
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
bottomDialog.show();
}
阅读全文
0 0
- 从底部弹出框
- DialogFragment从底部弹出
- PopupWindow从底部弹出
- Dialog从底部弹出 在底部位置
- android 键盘从底部弹出
- 从屏幕底部弹出PopupWindow
- activity从底部弹出动画
- 从屏幕底部弹出PopupWindow
- android从底部弹出对话框
- 从底部弹出的PopupWindow
- 底部弹出框拍照,从相册选取,取消 仿 ios
- android底部弹出框
- 底部弹出框
- 底部弹出框
- 底部弹出框分享
- dialog底部弹出框
- 底部弹出框
- 设置Dialog全屏,并从底部弹出
- Android面试篇之View和ViewGroup的关系
- AngularJs讲师代码点击状态值改变背景色
- Mysql主从复制实战
- Java线程池的使用
- 习题7 5-7题
- 从底部弹出框
- Assert关键字
- 微信小程序swiper如何获得当前页面的index
- Linux下MySQL5.6的修改字符集编码为UTF8(解决中文乱码问题,亲测可用!)
- EA&UML日拱一卒-多任务编程超入门-(14)麻雀虽小,五脏俱全
- QClipboard 剪贴板
- 风投简介与IT风投的优势
- Java序列化与反序列化
- 为什么python设计时要有__init__.py才视为包