layout_*的一些注意事项
layout_*的一些注意事项
在Android UI的开发中layout_*应该是用的很多的,但其中有很多的坑想必大家也碰到过,今天就来写写自己碰到的!之后如果还有碰到就在添加。
layout_width
| layout_height
起因
先来说说起因,做一个自定义的Dialog。这本来是很简单的事情,以前也做过很多次包括PopupWindow
。可能是之前到处借鉴别人的代码,没怎么注意,今天自己动手写。出现了个之前出现却没仔细解决的问题!然后就花了一下午甚至还去stackoverflow上提了一发问,不得不说国外的环境就是比国内的好。国内的论坛”杂鱼”太多。真正好好回答你问题的没几个!但也不乏有细心的大神指导~
问题描述见stackoverflow:
http://stackoverflow.com/questions/37854419/why-can-android-alertdialogs-width-and-height-1
问题描述
看了stackoverflow的人应该知道我出现了什么样的问题,问题总的来说是4个:
- 问题1:我在AlertDialog
实例化的时候,直接获取其高度和宽度,结果得到-1 ,出现-1的原因
- 问题2:setLayout
必须在dialog.show()
之后执行,理由是?
- 问题3:getWindow.setLayout(int width, int height)
这里width
和height
的单位是什么?
- 问题4:为何xml文件中的LinearLayout
中的layout_width
和layout_height
没有起到作用!
问题解决
问题1:
AlertDialog
实例化AlertDialog dialog = new AlertDialog.Builder(MainActivity.this).setView(view).create();
后,AlertDialog
并没有真正被创建。只有当dialog.create()
[API 21才允许使用]和dialog.show()
之后才真正被创建。所以当我这个时候去获取它的高度和宽度的时候会得到”-1”,这个“-1”是有深意的
@Deprecatedpublic static final int FILL_PARENT = -1;/*** Special value for the height or width requested by a View.* MATCH_PARENT means that the view wants to be as big as its parent,* minus the parent's padding, if any. Introduced in API Level 8.*/public static final int MATCH_PARENT = -1;/*** Special value for the height or width requested by a View.* WRAP_CONTENT means that the view wants to be just large enough to fit* its own internal content, taking its own padding into account.*/public static final int WRAP_CONTENT = -2;
“-1”即全屏。默认是全屏的。如果我们把
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();Log.d("TAG", "First lp width and height" + lp.width + " " + lp.height);
我门得到的结果为“-2“。至于为何我也不知所以!
问题2
问题2和问题1是一样的问题,同样是由于Dialog还未生成,所以在.show()
之后,setLayout()
是可以起到作用的!
问题3
这里的int width
和int height
都是px单位的。可以看到我设置了TextView的高度和宽度分别是200dp
设置了Dialog的高度和宽度分贝是500px
则会出现下面的效果:
发现200dp
和500px
差的不多。
问题4
这个问题就很高深了,具体为啥是由国外友人告诉我的。
layout_ prefixed attributes are set on a LayoutParams object provided by parent view. Since there’s no parent, there are no LayoutParams you can work with. Try setting android:minHeight and android:minWidth instead.
国外友人说的很详细,layout_*
这个属性要能使用必须有父视图(父布局)。如果你不是很懂(其实我也不是很懂),看看郭神的这篇博客可能会有点体会:
http://blog.csdn.net/guolin_blog/article/details/12921889
平时我们经常使用layout_width和layout_height来设置View的大小,并且一直都能正常工作,就好像这两个属性确实是用于设置View的大小的。而实际上则不然,它们其实是用于设置View在布局中的大小的,也就是说,首先View必须存在于一个布局中
这也就是为啥有时候在xml那边设置了宽、高,但是却没能在界面中体现出来的某一个原因。
layout_weight
链接在这里:http://blog.csdn.net/cuihaoren01/article/details/51373887
layout_gravity
| gravity
android:gravity
是用于设置View组建对齐方式。是针对控件里面的元素来说的,用来控制元素在该空间里的显示位置。android:layout_gravity
用于设置Container组建的对齐方式。是针对控件本身而言,用来控制该控件在包涵该控件的父控件的位置。- 特殊情况:当我们采用
LinearLayout
布局时:
1)当android:orientation = veritical
时,android:layout_gravity
只有水平方向的设置才起作用,垂直方向的设置是不起作用的
2)当android:orientation = horizontal
时,android:layout_gravity
只有垂直方向的设置才起作用,水平方向的设置不起作用。
之后如果还出现什么问题或者Bug的话在补充也希望有人能给我补充!
layout_*的一些注意事项相关推荐
- C++ OP相关注意事项
C++ OP相关注意事项 Paddle中Op的构建逻辑 1.Paddle中Op的构建逻辑 Paddle中所有的Op都继承自OperatorBase,且所有的Op都是无状态的,每个Op包含的成员变量只有 ...
- Hashing散列注意事项
Hashing散列注意事项 Numba支持内置功能hash(),只需__hash__()在提供的参数上调用成员函数即可 .这使得添加对新类型的哈希支持变得微不足道,这是因为扩展APIoverload_ ...
- android 读取asset下的文件注意事项
注意事项:file:后面是三个斜杠,后面是android_asset,在后面就是html的名字.
- Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...
- 【整理】NSTimer使用及注意事项
一.NSTimer的创建 // 创建一个定时器,但是么有添加到运行循环,我们需要在创建定时器后手动的调用 NSRunLoop 对象的 addTimer:forMode: 方法. + (NSTimer ...
- WIN7源码安装Apache和PHP注意事项
安装注意事项. 你注意下下载PHP,Apache的网站,上面有提示要安装Visual C++库的. Apache2.4.4需要VC10库支持,Microsoft Visual C++ 2010 SP1 ...
- html语言书写注意事项,CSS命名规范参考及书写注意事项
CSS书写顺序 *{ /*显示属性*/ display position float clear cursor - /*盒模型*/ margin padding width height /*排版*/ ...
- 安川g7接线端子图_西门子SIWAREX称重模块安装接线注意事项!
与称重变送器和称重仪表不同,SIWAREX系列称重模块可以直接接收称重传感器输出的mV信号,并与西门子控制系统(包括S7 200/300/1200/ET200M/ ET200S)无缝集成,具有扩展灵活 ...
- 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
扫地车 随着经济的发展,人们的生活水平不断提高,对生活环境的要求也越来越高,于是许多工厂.物业.超市.社区.市政单位等开始购买扫地车来进行路面清洁.一是清洗效果好,二是效率高,可以节省人工成本.扫地车 ...
最新文章
- 全国志愿信息服务器,全国志愿者服务信息系统官网登录,2020全国志愿者服务信息系统官网登录注册入口预约 v1.0-手游汇...
- 使用system函数时应该忽略两个信号
- clickhouse原理解析与应用实践_Hybrid App (混合应用) 技术全解析 方案原理篇
- 一次惊险的跳槽面试经历(阿里/美团/头条/网易/有赞...)
- UI实用可临摹素材|剖析UI界面设计基本原则!
- java8接口写静态方法_Java 8接口更改–静态方法,默认方法
- python基础之函数式编程
- windows 安装使用luarocks
- 图像基础 PSNR 峰值信噪比
- 听音室-HIFI入门之10张公认的经典发烧碟
- uni-app实现一键登录
- python调用手机摄像头识别二维码_JS调用安卓手机摄像头扫描二维码
- 如何Deactivate .Net Reflector
- 周育如 K.K 音標英文教學 (自然發音)总结
- 职场分享--职场中如何做一名优秀的员工
- 自动生成带昵称的头像(仿照钉钉头像)
- linux下如何启动ice服务器,linux: ICE搭建
- Centos7:网络设置+搜狗输入法安装
- 虾皮马来西亚热销产品有哪些?
- vue中使用vue-qrcode-reader自动检测并解码来自摄像机流的QR码
热门文章
- 当年赫赫有名的“四大工学院”,如今都发展得怎样?依然牛气冲天!
- flash动画------豹子奔跑
- JS中的批量替换---.replace(/\/g,@);
- IDEA中展开包结构的方法
- 前端|Layui实现表单
- thinkphp5 验证码跨域/验证失败 问题解决方案
- 启动RabbitMQ成功但是访问localhost:15672无法访问解决方案
- 2021天津高考高中成绩查询系统,2021天津地区高考成绩排名查询,天津高考各高中成绩喜报榜单...
- SpringMVC 程序开发
- 中间件---Binlog传输同步---Canal