欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程自定义对话框(Dialog)位置及大小的方法

程序员文章站 2023-11-26 19:11:04
本文实例讲述了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程序设计有所帮助。