当前位置:首页 » 安卓系统 » android设置宽高

android设置宽高

发布时间: 2025-08-26 05:01:00

Ⅰ Android 自定义View:为什么你设置的wrap_content不起作用

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

其实这里有两个问题:

请分析 & 解决问题之前,请先看自定义View原理中 (2)自定义View Measure过程 - 最易懂的自定义View原理系列

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

继续往下看 getDefaultSize()

从上面发现:

那么有人会问:wrap_content和match_parent具有相同的效果,为什么是填充父容器的效果呢?

我们知道,子View的MeasureSpec值是根据子View的布局参数(LayoutParams)和父容器的MeasureSpec值计算得来,具体计算逻辑封装在getChildMeasureSpec()里。

接下来,我们看生成子View MeasureSpec的方法: getChildMeasureSpec() 的源码分析:

getChildMeasureSpec()

从上面可以看出,当子View的布局参数使用 match_parent 或 wrap_content 时:

所以: wrap_content 起到了和 match_parent 相同的作用:等于父容器当前剩余空间大小

当自定义View的布局参数设置成wrap_content时时,指定一个默认大小(宽 / 高)。

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

网上流传着这么一个解决方案:

答: 是,当父View为 AT_MOST 、View为 match_parent 时,该View的 match_parent 的效果就等于 wrap_content 。上述方法存在逻辑错误,但由于这种情况非常特殊的,所以导致最终的结果没有错误。具体分析请看下面例子:

从上面的效果可以看出,View大小 = 默认值

我再将子View的属性改为 wrap_content :

从上面的效果可以看出,View大小还是等于默认值。

相信看到这里你已经看懂了:

为了更好的表示判断逻辑,我建议你们用本文提供的解决方案,即根据布局参数判断默认值的设置

不定期分享关于 安卓开发 的干货,追求 短、平、快 ,但 却不缺深度

Ⅱ Android中测量控件的内部文字内容的宽、高度

在Android中,自定义View时通过Canvas绘制文字时,测量控件内部文字内容的宽、高是关键步骤。本文将介绍几种常用方法,旨在帮助开发者解决这一问题。

首先,可通过`Paint.measureText`方法测量文本的宽度。这是一个快捷方式,适用于快速获取文本宽度信息。

其次,使用`Paint.getTextBounds`方法,可以获得文字所在矩形区域,进而得到宽度和高度。该方法更为全面,适用于需要精确测量场景。

`Paint.getTextWidths`方法同样提供每个字符的宽度信息,对于处理多字符文本布局问题非常有用。

通过`Paint.FontMetrics`或`Paint.FontMetricsInt`可以获取高度。两者主要区别在于精度,前者为float,后者为int,具体使用时需根据需求选择。

获取高度时,注意到两个高度值略有不同,`height2`值略大于`height1`,以保证文本顶部和底部有足够的留白。在实际应用中,需根据具体需求选择合适的高度值。

此外,通过`Paint.getFontSpacing`和`Paint.getFontMetrics(null)`方法获取高度,本质上是调用`Paint.getFontMetrics`实现的。获取的高度值与`fontMetrics.descent - fontMetrics.ascent`计算结果一致。

`Layout.getDesiredWidth`方法用于获取宽度信息,但在TextView布局中可能存在文字实际占用高度与属性`textSize`值不一致的问题。文档中提示可通过设置`android:includeFontPadding`来控制是否包含上下空白。

总结而言,Android中测量文字内容宽、高有多种方法,开发者需根据具体需求选择合适的方法。理解不同方法的特性和应用场景,有助于更精确地控制文字布局,提升应用界面的美观性和用户体验。

Ⅲ android 开发的时候怎么动态设置控件宽高

1、获取控件所在的布局

java">LayoutParamspara=button.getLayoutParams();//获取按钮的布局

2、修改布局中的height,width属性

para.width=200;//修改宽度
para.height=300;//修改高度

3、重新设置修改后的布局给控件

button.setLayoutParams(para);//设置修改后的布局。
热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:585
制作脚本网站 发布:2025-10-20 08:17:34 浏览:881
python中的init方法 发布:2025-10-20 08:17:33 浏览:574
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:761
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:677
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1005
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:249
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:108
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:799
python股票数据获取 发布:2025-10-20 07:39:44 浏览:705