【错误记录】Android Studio 布局文件报错 ( View with id -1: xx.MyView#onMeasure() did not set the measured dime )
文章目录
- 一、报错信息
- 二、解决方案
一、报错信息
在 ConstraintLayout 约束布局中 , 引入了自定义 View 后 , 整个 Design 图形化操作界面没了 , 报错信息如下 :
java.lang.IllegalStateException: View with id -1: com.example.MyView#onMeasure() did not set the measured dimension by calling setMeasuredDimension()at android.view.View.measure_Original(View.java:25786)at android.view.View_Delegate.measure(View_Delegate.java:80)at android.view.View.measure(View.java:25737)at androidx.constraintlayout.widget.ConstraintLayout$Measurer.measure(ConstraintLayout.java:811)at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.measure(BasicMeasure.java:466)at androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.solverMeasure(BasicMeasure.java:372)at androidx.constraintlayout.core.widgets.ConstraintWidgetContainer.measure(ConstraintWidgetContainer.java:120)at androidx.constraintlayout.widget.ConstraintLayout.resolveSystem(ConstraintLayout.java:1594)at androidx.constraintlayout.widget.ConstraintLayout.onMeasure_Original(ConstraintLayout.java:1708)at androidx.constraintlayout.widget.ConstraintLayout.onMeasure(ConstraintLayout.java)at android.view.View.measure_Original(View.java:25773)at android.view.View_Delegate.measure(View_Delegate.java:80)at android.view.View.measure(View.java:25737)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6980)at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)at android.view.View.measure_Original(View.java:25773)at android.view.View_Delegate.measure(View_Delegate.java:80)at android.view.View.measure(View.java:25737)at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735)at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481)at android.view.View.measure_Original(View.java:25773)at android.view.View_Delegate.measure(View_Delegate.java:80)at android.view.View.measure(View.java:25737)at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6980)at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)at android.view.View.measure_Original(View.java:25773)at android.view.View_Delegate.measure(View_Delegate.java:80)at android.view.View.measure(View.java:25737)at com.android.layoutlib.bridge.impl.RenderSessionImpl.measureView(RenderSessionImpl.java:657)at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:375)at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:436)at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:121)at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:717)at com.android.tools.idea.rendering.RenderTask.lambda$inflate$9(RenderTask.java:873)at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$3.run(RenderExecutor.kt:192)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)at java.base/java.lang.Thread.run(Thread.java:829)
二、解决方案
出现上述报错问题 , 是由于在 自定义 View 或 ViewGroup 的 onMeasure() 方法 中 没有调用 setMeasuredDimension() 方法导致的 ;
实现 onMeasure() 方法时,需要 调用 setMeasuredDimension() 来设置 View 或 ViewGroup 的测量宽度和高度。
如果您没有调用 setMeasuredDimension(),则会发报 “View#onMeasure() did not set the measured dimension by calling setMeasuredDimension()” 警告,并且该视图可能无法正常显示。
以下是一个示例,在这个示例中,自定义 View 的 onMeasure() 方法调用了 setMeasuredDimension() 来设置 View 的测量宽度和高度。
class CustomView(context: Context, attrs: AttributeSet?) : View(context, attrs) {override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {// Measure the view's widthval width = MeasureSpec.getSize(widthMeasureSpec)// Calculate the view's height based on the width and aspect ratioval aspectRatio = 0.75fval height = (width * aspectRatio).toInt()// Set the measured dimensionssetMeasuredDimension(width, height)}
}
在上述示例中 :
- 首先 , 使用 MeasureSpec.getSize() 方法来获取视图的宽度。
- 然后 , 使用一个固定的宽高比(0.75f)计算出视图的高度。
- 最后 , 调用 setMeasuredDimension() 方法来设置视图的测量宽度和高度。
实现 onMeasure() 方法时,必须在最后 调用 setMeasuredDimension() 来设置视图的测量宽度和高度。
否则,会报 “View#onMeasure() did not set the measured dimension by calling setMeasuredDimension()” 警告,并且视图可能无法正常显示。
在本案例中 , 源码如下 :
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayoutclass MyView(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs) {init {val inflater = LayoutInflater.from(context)inflater.inflate(R.layout.item_left_path, this, true)}override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {// Your layout code here}override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {// Your measure code here}
}
如果没有使用到 布局 / 测量逻辑 , 直接将这两个函数删除 ;
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayoutclass MyView(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs) {init {val inflater = LayoutInflater.from(context)inflater.inflate(R.layout.item_left_path, this, true)}
}
经过上述修改 , 报错消失 ;
【错误记录】Android Studio 布局文件报错 ( View with id -1: xx.MyView#onMeasure() did not set the measured dime )相关推荐
- 【错误记录】Manifest 清单文件报错 ( ..required to specify an explicit value for `android:exported` when the .. )
文章目录 一.报错信息 二.解决方案 一.报错信息 修改 AndroidManifest.xml 清单文件时 , 发现合并清单文件时报错 , 该报错不影响程序运行 ; 报错信息 : Merging E ...
- 【错误记录】Android Studio 配置 AspectJ 报错 ( all buildscript {} blocks must appear before any plugins {} )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android Studio 配置 AspectJ 报错 : Build file 'D:\002_Project\002_Android_Le ...
- android studio 编译遇到报错 app:compileDebugJavaWithJavac 处理办法
android studio编译遇到报错app:compileDebugJavaWithJavac处理办法 android studio 在编译时经常会遇到如下图片中这个错误,但是程序运行时可以正常运 ...
- android studio 自动引用,Android Studio三方引用报错但是项目可以运行的解决方案
Android Studio第一次启动的Fetching android sdk component information的问题 1)进入刚安装的Android Studio目录下的bin目录.找到 ...
- 【项目笔记】布局文件报错Suspicious size: this will make the view invisible, probably intended for layout_width
写着写着就懵逼了,一直以为布局文件没写错啊,horizontal就是竖直啊,原来布局文件报错,不仅仅需要从报错的地方解决问题,还需要从其他地方去分析. 很明显是方向orientation选错了,应该写 ...
- imp 00017 由于 oracle 错误 6550,imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 20005 求大神!...
当前位置:我的异常网» Oracle管理 » imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 2 ...
- Android Studio 安装虚拟机报错 Intel® HAXM installation failed.
Android Studio 安装虚拟机时报错 Intel® HAXM installation failed. To install Intel® HAXM follow the instructi ...
- 【错误记录】Android Studio 配置 AspectJ 报错 ( Failed to create Jar file C:\xxx\aspectjtools-1.8.10.jar. )
文章目录 一.报错信息 二.解决方案 三.Gradle 与 Gradle 插件版本适配 一.报错信息 在 Android Studio 中配置 AspectJ , 配置后的 Module 下的 bui ...
- 【错误记录】Android Studio 配置 GitHub 报错 ( Can‘t login using given credentials: Request response: 401 Una )
文章目录 一.报错信息 二.解决方案 一.报错信息 使用账号密码配置 , 出现如下错误 ; Can't login using given credentials: Request response: ...
最新文章
- 装了激光雷达的iPad Pro,还能用鼠标了:苹果新键盘、新iPad Pro、新MacBook Air来了...
- Android视图绘制逻辑与思想(一):attachToRoot到底有什么作用?
- hash集合方法使用
- linux之变量的设置与显示
- PHP中文URL编解码(urlencode()rawurlencode()
- 用原生PHP做Blog系统-Day01
- 问题 D: 最小生成树II
- X++中对字符串进行操作的函数
- 批量关停azure vm_如何从Azure VM数据库运行本地SQL报表
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- 探究 Linux 内核 dts 设备树定义文件
- UVA10196 Check The Check【模拟+回溯】
- 【劲峰论道时空分析技术-学习笔记】4 如何度量时空变化
- [转]Eclipse遇到的常见问题
- bmon 带宽监视器
- 浅谈视频会议系统的带宽控制!
- 使用Crucible和FishEye链接svn库时遇到尝试添加或索引存储库时出现错误-版本中不存在的问题
- 周星驰搞笑电影中的BT角色大全(100位)
- 普通高等学校毕业生就业工作暂行规定
- matlab极坐标画椭圆,matlab怎么画极坐标
热门文章
- php网站添加手机桌面,手机浏览器添加到主屏幕(桌面)的图标设置以及WebApp模式...
- Planar Homographies (平面单应矩阵)
- notepad++ smali语法高亮模板分享
- 无限扩展器dhcp服务器,tplink无线扩展器怎么设置 tplink无线扩展器设置方法
- mysql 复合外键_使用复合主键作为外键
- web系统四层结构中服务器端,Web数据库应用的三层体系结构Web服务器.PPT
- C#中分割字符串输出字符数组
- 【Mybatis学习总结七】调用存储过程
- 【获奖纪实】2016年“CCF优秀大学生奖”拟获奖者名单公示
- PAT 乙级 1026 程序运行时间 python