wrap_content

时间:2026-05-08 18:05:20编辑:莆田seo君

自定义View:为什么wrap_content属性不起作用

在使用自定义View时,View宽/高的wrap_content属性不起自身应用的作用,而且是起到了与match_parent相同作用?

问题出现在View的宽/高 设置,那我们直接来看自定义View绘制中第一步对View宽/高设置的过程:measure过程中的onMeasure()方法:

继续往下看getDefaultSize(),其作用是根据父View提供的宽/高测量规格计算View自身的宽/高值。源码分析如下:

1.getDefaultSize()的默认实现中,当View的测量模式是AT_MOST或EXACTLY时,View的大小都会被设置成父View的specSize。
2.因为AT_MOST对应wrap_content,EXACTLY对应match_parent,所以默认情况下,wrap_content和match_parent是具有相同的效果。
这里就解决了wrap_content起到了与match_parent相同的作用。

那么有人会问,View的MeasureSpec是怎么赋值的?
我们知道,View的MeasureSpec的值是根据View的布局参数(LayoutParams)和父容器的MeasureSpec值计算得来的,具体计算逻辑封装在getChildMeasureSpec()里。

我们来分析下getChildMeasureSpec的源码:

从上面可以看出,当子view的布局参数使用match_parent或wrap_content时,子view的specSize总是等于父容器当前剩余空间大小

当自定义View的布局参数设置成wrap_content时,指定一个默认大小(宽/高)。具体是在复写onMeasure()里进行设置。

这样,当你的自定义View的宽/高设置成wrap_content属性时就会生效了。


android RelativeLayout设置属性wrap_content,为什么还是撑满全屏?

检查两个地方:
是否在AndroidManifest.xml 里面设置了全屏。
你的layout 文件中,有padding="0dp"这样的设定
你的layout文件中,有其他元素 ,textview 等形式的元素 内容你设定了为 fill_parent.

解决办法:很简单,你希望显示的布局差距是多少,就在RelativeLayout 的参数里面加入 android:paddingLeft , android:paddingTop 这些参数,就可以了


Android中wrap_parent、match_parent是什么意思,有什么区别?

1、wrap是扩展空间,并且强制性占用整个空间,不给其他控件留地方。2、match的话是指“填充满”父容器。但是他跟fill_parent是不一样的,fill是真的填满,没有条件。而match的话有自动调整的功能。区别: 1、wrap_content设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。2、match_parentAndroid2.2中match_parent和fill_parent是一个意思 .两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了1、Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。

上一篇:新生儿腹泻怎么办

下一篇:没有了