当前位置:首页 » 安卓系统 » 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);//设置修改后的布局。
热点内容
安卓手机拍照录像时怎么旋转 发布:2025-08-26 07:51:27 浏览:331
云服务器上传程序 发布:2025-08-26 07:46:36 浏览:258
盗版广联达加密狗升级 发布:2025-08-26 07:45:06 浏览:23
c语言中形参的默认存储类别是 发布:2025-08-26 07:39:14 浏览:441
极限越野安卓怎么玩 发布:2025-08-26 07:25:20 浏览:985
网页配置存储 发布:2025-08-26 07:16:15 浏览:468
Mu代码编译器 发布:2025-08-26 07:11:21 浏览:361
java一个程序 发布:2025-08-26 07:01:02 浏览:852
华为手机如何设置不要输入密码 发布:2025-08-26 06:51:55 浏览:650
期望的算法 发布:2025-08-26 06:43:53 浏览:536