Android编程自定义对话框(Dialog)位置及大小的方法
程序员文章站
2023-12-11 21:11:10
本文实例讲述了android编程自定义对话框(dialog)位置及大小的方法。分享给大家供大家参考,具体如下:
代码:
package angel.devil;...
本文实例讲述了android编程自定义对话框(dialog)位置及大小的方法。分享给大家供大家参考,具体如下:
代码:
package angel.devil; import android.app.activity; import android.app.dialog; import android.os.bundle; import android.view.gravity; import android.view.window; import android.view.windowmanager; public class dialogdemoactivity extends activity { /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); dialog dialog = new dialog(this); // setcontentview可以设置为一个view也可以简单地指定资源id // layoutinflater // li=(layoutinflater)getsystemservice(layout_inflater_service); // view v=li.inflate(r.layout.dialog_layout, null); // dialog.setcontentview(v); dialog.setcontentview(r.layout.dialog_layout); dialog.settitle("custom dialog"); /* * 获取圣诞框的窗口对象及参数对象以修改对话框的布局设置, * 可以直接调用getwindow(),表示获得这个activity的window * 对象,这样这可以以同样的方式改变这个activity的属性. */ window dialogwindow = dialog.getwindow(); windowmanager.layoutparams lp = dialogwindow.getattributes(); dialogwindow.setgravity(gravity.left | gravity.top); /* * lp.x与lp.y表示相对于原始位置的偏移. * 当参数值包含gravity.left时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略. * 当参数值包含gravity.right时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略. * 当参数值包含gravity.top时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略. * 当参数值包含gravity.bottom时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略. * 当参数值包含gravity.center_horizontal时 * ,对话框水平居中,所以lp.x就表示在水平居中的位置移动lp.x像素,正值向右移动,负值向左移动. * 当参数值包含gravity.center_vertical时 * ,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像素,正值向右移动,负值向左移动. * gravity的默认值为gravity.center,即gravity.center_horizontal | * gravity.center_vertical. * * 本来setgravity的参数值为gravity.left | gravity.top时对话框应出现在程序的左上角,但在 * 我手机上测试时发现距左边与上边都有一小段距离,而且垂直坐标把程序标题栏也计算在内了, * gravity.left, gravity.top, gravity.bottom与gravity.right都是如此,据边界有一小段距离 */ lp.x = 100; // 新位置x坐标 lp.y = 100; // 新位置y坐标 lp.width = 300; // 宽度 lp.height = 300; // 高度 lp.alpha = 0.7f; // 透明度 // 当window的attributes改变时系统会调用此函数,可以直接调用以应用上面对窗口参数的更改,也可以用setattributes // dialog.onwindowattributeschanged(lp); dialogwindow.setattributes(lp); /* * 将对话框的大小按屏幕大小的百分比设置 */ // windowmanager m = getwindowmanager(); // display d = m.getdefaultdisplay(); // 获取屏幕宽、高用 // windowmanager.layoutparams p = dialogwindow.getattributes(); // 获取对话框当前的参数值 // p.height = (int) (d.getheight() * 0.6); // 高度设置为屏幕的0.6 // p.width = (int) (d.getwidth() * 0.65); // 宽度设置为屏幕的0.65 // dialogwindow.setattributes(p); dialog.show(); } }
布局文件:
main.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00ff00" android:orientation="vertical" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </linearlayout>
dialog_layout.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:padding="10dp" > <imageview android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginright="10dp" android:src="@drawable/ic_launcher" /> <textview android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="a dialog" android:textcolor="#fff" /> </linearlayout>
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。