文章目录

  • 一、报错信息
  • 二、解决方案

一、报错信息


在 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 )相关推荐

  1. 【错误记录】Manifest 清单文件报错 ( ..required to specify an explicit value for `android:exported` when the .. )

    文章目录 一.报错信息 二.解决方案 一.报错信息 修改 AndroidManifest.xml 清单文件时 , 发现合并清单文件时报错 , 该报错不影响程序运行 ; 报错信息 : Merging E ...

  2. 【错误记录】Android Studio 配置 AspectJ 报错 ( all buildscript {} blocks must appear before any plugins {} )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android Studio 配置 AspectJ 报错 : Build file 'D:\002_Project\002_Android_Le ...

  3. android studio 编译遇到报错 app:compileDebugJavaWithJavac 处理办法

    android studio编译遇到报错app:compileDebugJavaWithJavac处理办法 android studio 在编译时经常会遇到如下图片中这个错误,但是程序运行时可以正常运 ...

  4. android studio 自动引用,Android Studio三方引用报错但是项目可以运行的解决方案

    Android Studio第一次启动的Fetching android sdk component information的问题 1)进入刚安装的Android Studio目录下的bin目录.找到 ...

  5. 【项目笔记】布局文件报错Suspicious size: this will make the view invisible, probably intended for layout_width

    写着写着就懵逼了,一直以为布局文件没写错啊,horizontal就是竖直啊,原来布局文件报错,不仅仅需要从报错的地方解决问题,还需要从其他地方去分析. 很明显是方向orientation选错了,应该写 ...

  6. imp 00017 由于 oracle 错误 6550,imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 20005 求大神!...

    当前位置:我的异常网» Oracle管理 » imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 imp 导入dmp文件报错 IMP-00017: 由于 ORACLE 异常 2 ...

  7. Android Studio 安装虚拟机报错 Intel® HAXM installation failed.

    Android Studio 安装虚拟机时报错 Intel® HAXM installation failed. To install Intel® HAXM follow the instructi ...

  8. 【错误记录】Android Studio 配置 AspectJ 报错 ( Failed to create Jar file C:\xxx\aspectjtools-1.8.10.jar. )

    文章目录 一.报错信息 二.解决方案 三.Gradle 与 Gradle 插件版本适配 一.报错信息 在 Android Studio 中配置 AspectJ , 配置后的 Module 下的 bui ...

  9. 【错误记录】Android Studio 配置 GitHub 报错 ( Can‘t login using given credentials: Request response: 401 Una )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用账号密码配置 , 出现如下错误 ; Can't login using given credentials: Request response: ...

最新文章

  1. 装了激光雷达的iPad Pro,还能用鼠标了:苹果新键盘、新iPad Pro、新MacBook Air来了...
  2. Android视图绘制逻辑与思想(一):attachToRoot到底有什么作用?
  3. hash集合方法使用
  4. linux之变量的设置与显示
  5. PHP中文URL编解码(urlencode()rawurlencode()
  6. 用原生PHP做Blog系统-Day01
  7. 问题 D: 最小生成树II
  8. X++中对字符串进行操作的函数
  9. 批量关停azure vm_如何从Azure VM数据库运行本地SQL报表
  10. [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
  11. 探究 Linux 内核 dts 设备树定义文件
  12. UVA10196 Check The Check【模拟+回溯】
  13. 【劲峰论道时空分析技术-学习笔记】4 如何度量时空变化
  14. [转]Eclipse遇到的常见问题
  15. bmon 带宽监视器
  16. 浅谈视频会议系统的带宽控制!
  17. 使用Crucible和FishEye链接svn库时遇到尝试添加或索引存储库时出现错误-版本中不存在的问题
  18. 周星驰搞笑电影中的BT角色大全(100位)
  19. 普通高等学校毕业生就业工作暂行规定
  20. matlab极坐标画椭圆,matlab怎么画极坐标

热门文章

  1. php网站添加手机桌面,手机浏览器添加到主屏幕(桌面)的图标设置以及WebApp模式...
  2. Planar Homographies (平面单应矩阵)
  3. notepad++ smali语法高亮模板分享
  4. 无限扩展器dhcp服务器,tplink无线扩展器怎么设置 tplink无线扩展器设置方法
  5. mysql 复合外键_使用复合主键作为外键
  6. web系统四层结构中服务器端,Web数据库应用的三层体系结构Web服务器.PPT
  7. C#中分割字符串输出字符数组
  8. 【Mybatis学习总结七】调用存储过程
  9. 【获奖纪实】2016年“CCF优秀大学生奖”拟获奖者名单公示
  10. PAT 乙级 1026 程序运行时间 python