自定义大小和位置

在Android 5.0以上 自定义Dialog时发现无法横向铺满屏幕
代码大致如下:

Dialog dialog = new Dialog(this);dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);dialog.setContentView(R.layout.dialog_layout);Window dialogWindow = dialog.getWindow();dialogWindow.setGravity(Gravity.BOTTOM);dialogWindow.getDecorView().setPadding(0, 0, 0, 0);WindowManager.LayoutParams lp = dialogWindow.getAttributes();lp.width = WindowManager.LayoutParams.FILL_PARENT;lp.height = WindowManager.LayoutParams.WRAP_CONTENT;dialogWindow.setAttributes(lp);dialog.show();

分析解决办法:
查找父类Dialog的style和theme,发现background背景属性:

到源码一查看

一张.9图片
so 是因为背景的.9图四周 边距太宽的原因,和宽度设置无关。其实是填满了的,只是四周是透明的而已。

接下来说说解决办法:
方法一:自定义style,继承Theme.Dialog,重写背景属性:

<style name="dialog" parent="@android:style/Theme.Dialog">        "android:windowFrame">@null        "android:windowIsFloating">true        "android:windowIsTranslucent">false        "android:windowNoTitle">true        "android:windowBackground">@android:color/white        "android:backgroundDimEnabled">truestyle>

然后在 代码添加Style

Dialog dialog = new Dialog(this,R.style.dialog);

方法二:

/**  * 5.0以上默认有个.9图片作为背景,导致不能铺满横向屏幕  */ dialogWindow.setBackgroundDrawableResource(android.R.color.white);

Dialog 位置属性详解:

/**  * 获取对话框的窗口对象及参数对象以修改对话框的布局设置, * 可以直接调用getWindow(),表示获得这个Activity的Window * 对象,这样这可以以同样的方式改变这个Activity的属性. */Window dialogWindow = dialog.getWindow();WindowManager.LayoutParams lp = dialogWindow.getAttributes();dialogWindow.setGravity(Gravity.CENTER_HORIZONTAL | 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. *  */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 = getWindow().getAttributes(); // 获取对话框当前的参数值// p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6// p.width = (int) (d.getWidth() * 0.65); // 宽度设置为屏幕的0.95// dialogWindow.setAttributes(p);

样式

在Android开发过程中经常会遇到需要自定义Dialog的需求,这时候就可能遇到需要透明背景啊,添加输入框,自动弹出软键盘且不能遮盖住输入框等,这个时候可以添加如下样式解决:  <style name="dialog" parent="@android:style/Theme.Holo.Light.Dialog">      "android:windowFrame">@color/transparent      "android:windowIsFloating">true      "android:windowIsTranslucent">false      "android:windowNoTitle">true      "android:windowBackground">@color/transparent      "android:backgroundDimEnabled">true  style>    <style name="inputDialog" parent="@android:style/Theme.Holo.Light.Dialog">      "android:windowFrame">@color/transparent      "android:windowIsFloating">true      "android:windowIsTranslucent">false      "android:windowNoTitle">true      "android:windowBackground">@color/transparent      "android:backgroundDimEnabled">true      "android:windowSoftInputMode">stateAlwaysVisible  style>

参考资料:

https://blog.csdn.net/u011183394/article/details/51445202

https://blog.csdn.net/wnl_csdn/article/details/53284073

更多相关文章

  1. android 学习(2)对话框
  2. Android提示版本更新的实现
  3. 将Android(安卓)Activity设置成对话框样式
  4. Android:WebView与Javascript交互(相互调用参数、传值)
  5. Android(安卓)2.3 r1 中文API (78)—— ViewAnimator
  6. Android上传文件,客户端+服务器源码
  7. php直播源码安卓自定义Dialog设置自动消失
  8. Android(安卓)对话框
  9. 查询通讯录拨号发短信

随机推荐

  1. 居中布局列举
  2. MongoDB 4.X CRUD 基本操作说明
  3. 一文了解 Kubernetes
  4. 活码二维码(动态二维码)域名池介绍
  5. 意派Epub360丨花式送祝福!这款新年H5模板
  6. MyCms 自媒体内容管理系统安装环境要求
  7. html基础知识01
  8. 1.Ement常用语法、元素属性和布局标签
  9. 认识元素、Ement语法
  10. 12.21作业