首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

onMeasure没有在我的自定义viewgroup android中调用

根据您的问答内容,您可能遇到了在自定义ViewGroup中的onMeasure方法没有被调用的问题。以下是针对这个问题的完善且全面的答案:

onMeasure方法

onMeasure方法是Android中的一个关键方法,用于测量自定义View的大小。当Android系统需要知道一个View的大小时,它会调用onMeasure方法。在自定义ViewGroup中,如果您希望系统能够正确测量您的自定义View的大小,您需要重写onMeasure方法。

方法重写

在自定义ViewGroup中,您需要重写onMeasure方法,并在其中指定您的自定义View的大小。以下是一个简单的示例:

代码语言:java
复制
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int desiredWidth = 100;
    int desiredHeight = 100;

    int widthMode = MeasureSpec.getMode(widthMeasureSpec);
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);

    int width;
    int height;

    if (widthMode == MeasureSpec.EXACTLY) {
        width = widthSize;
    } else if (widthMode == MeasureSpec.AT_MOST) {
        width = Math.min(desiredWidth, widthSize);
    } else {
        width = desiredWidth;
    }

    if (heightMode == MeasureSpec.EXACTLY) {
        height = heightSize;
    } else if (heightMode == MeasureSpec.AT_MOST) {
        height = Math.min(desiredHeight, heightSize);
    } else {
        height = desiredHeight;
    }

    setMeasuredDimension(width, height);
}

在这个示例中,我们指定了自定义View的宽度和高度为100dp。然后,我们根据父容器传递给我们的宽度和高度的模式来计算最终的宽度和高度。最后,我们使用setMeasuredDimension方法设置自定义View的大小。

推荐的腾讯云相关产品

腾讯云提供了一系列的产品和服务,可以帮助您更好地开发和部署自定义ViewGroup。以下是一些可能对您有帮助的产品:

  • 腾讯云Mobile Backend as a Service(MBaaS):MBaaS可以帮助您快速构建和部署后端服务,提供了一系列的云服务,包括数据库、存储、云函数等。
  • 腾讯云CloudBase:CloudBase是一个一站式的应用开发和部署平台,可以帮助您快速构建和部署自定义ViewGroup。
  • 腾讯云对象存储COS:如果您的自定义ViewGroup需要存储和检索文件,您可以使用腾讯云对象存储COS来存储和管理您的文件。
  • 腾讯云CDN:如果您的自定义ViewGroup需要加速内容,您可以使用腾讯云CDN来加速您的内容。

以上是针对您的问答内容的完善且全面的答案。如果您有其他问题或需要更多的帮助,请随时告诉我。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 自定义ViewonMeasure onLayout onDraw

正文 Android自定义View时常重写三个方法onMeasure和onLayout以及onDraw。...他们作用 onMeasure 计算当前View宽高 onLayout 处理子View布局 onDraw 绘制当前View 调用顺序为onMeasure–>onLayout–>onDraw...View还有三个比较重要方法 requestLayout View重新调用一次layout过程。...如果我们自定义View内容变了 但大小位置不变的话。只需要调用invalidate. 如果我们自定义View内容变了 大小位置也变的话。...getHeight() 获取真实高度 自定义属性 values文件夹下,打开attrs.xml,其实这个文件名称可以是任意,写在这里更规范一点 假设我们用到了两个属性一个宽度,一个颜色值属性

2.4K10

Carson带你学Android:手把手带你深入学习自定义View Measure过程

前言 自定义View是Android开发者必须了解基础 网上有大量关于自定义View原理文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化 等 今天,将全面总结自定义View...原理measure过程,能保证这是市面上最全面、最清晰、最易懂 目录 1....默认Style // 且只有明确调用时候才会生效, } public DIY_View(Context context,AttributeSet attrs,int defStyleAttr...为了让大家更好地理解ViewGroupmeasure过程(特别是复写onMeasure()),下面,将用ViewGroup子类LinearLayout来分析下ViewGroupmeasure过程...,而ViewGroupMeasuer过程没有; 具体测量流程总结如下所示 Carson带你学Android自定义View文章系列: Carson带你学Android自定义View基础 Carson

27710

一篇文章弄懂Android自定义viewgroup相关难点

本文注重于实践 viewgroup 测量布局流程基本梳理 稍微回顾下,基本viewgroup绘制和布局流程重点: 1.view onMeasure()方法中进行自我测量和保存,也就是说对于...所以我们理解这个过程为: viewgroup循环遍历调用所有子viewonmeasure方法,利用onmeasure方法计算出来大小,来确定这些子view最终可以占用大小和所处布局位置。...5.对于自定义view/viewgroup来说 我们几乎只需要关注下面三种需求: 对于已有的android自带view,我们只需要重写他onMeasure方法即可。修改一下这个尺寸即可完成需求。...对于android系统没有的,属于我们自定义view,比上面那个要复杂一点,要完全重写onMeasure方法。...自定义一个BannerImageView 修改onMeasure方法 所谓bannerImageview,就是很多电商其实都会放广告图,这个广告图宽高比都是可变,我们日常开发过程 也会经常接触到这种需求

65430

【错误记录】Android Studio 布局文件报错 ( View with id -1: xx.MyView#onMeasure() did not set the measured dime )

一、报错信息 ConstraintLayout 约束布局 , 引入了自定义 View 后 , 整个 Design 图形化操作界面没了 , 报错信息如下 : java.lang.IllegalStateException...自定义 View 或 ViewGroup onMeasure() 方法 没有调用 setMeasuredDimension() 方法导致 ; 实现 onMeasure() 方法时,需要 调用...以下是一个示例,在这个示例自定义 View onMeasure() 方法调用了 setMeasuredDimension() 来设置 View 测量宽度和高度。...实现 onMeasure() 方法时,必须在最后 调用 setMeasuredDimension() 来设置视图测量宽度和高度。...本案例 , 源码如下 : import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater

56010

Android技能树 — View小结

有些人可能会说那我肯定不会也不用看这个总结文章了,没关系,这次写很简单,基本大家都能理解。看完后,大家应该都会自己写效果不复杂自定义View和自定义ViewGroup。 PS: 非广告。...总结起来就是一句话:测量过程,系统会将ViewLayoutParams根据父容器ViewGroup所施加规则下,转换得出相对应MeasureSpec,然后根据这个MeasureSpec来测量出...我们并没有用到我们前面学到MeasureSpec知识,因为super.onMeasure()已经帮我们把MeasureSpec处理好了。 2....ViewGroup测量 ViewGroup测量前面,要提问个问题,大家应该知道了某个ViewMeasureSpeconMeasure()方法参数里面传进来。我们是直接拿来用了。...,但是每次都要写上面一大段代码, 不想写自定义ViewGroup了。

78020

Android自定义View-入门(明白自定义View和自定义ViewGroup)

> 然后我们自定义View里面吧我们自定义属性值取出来,构造函数,有个AttributeSet属性,我们需要用它来帮我们把布局里面的属性取出来。...文件标签 //即属性集合标签,R 文件名称为 R,styleable+name TypedArray a=context.obtainStyledAttributes...文件标签 //即属性集合标签,R 文件名称为 R,styleable+name TypedArray a=context.obtainStyledAttributes...ViewGroup 自定义View过程简单,其实也就那几步,可自定义ViewGroup 可就比较麻烦了,因为不仅要管好自己,还要兼顾子View。...更多Android开发知识请访问—— Android开发日常笔记,欢迎Star,你小小点赞,是对莫大鼓励。

1.1K30

Android自定义View死亡三部曲之Measure

我们在上一章节Android之View诞生之谜中分析了系统从启动actiivty到调用setContentView加载我们xml布局文件,但是此时我们View是不可见,因为我们还没有对其进行如下操作...从上面我们看到,里面调用onMeasure方法,这里要注意了: 我们ViewGroup没有重写ViewonMeasure方法,而但是我们android开发四大布局 FrameLayout、LinearLayout...所以我们可以分两种情况来看待:1、布局类控件;2、一般展示类控件; 自定义控件过程,一般情况下我们也需要通过重写onMeasure来做一些特殊处理。...不要打我,可没骗你哦 那么,我们实际开发中肯定要处理这个情况,所以我们自定义直接继承View来实现控件时,一定要自己处理这两种情况哦。...至此,View三围已经测出来了,本篇略长,测量android死亡三部曲是第一部,也是里面最复杂、重要一部,快看下你三围是多少吧!

35330

Android自定义View使用及其原理知识点总结

Android开发,系统提供给我们UI控件是有限,当我们需要使用一些特殊控件时候,只靠系统提供控件,可能无法达到我们想要效果,这时,就需要我们自定义一些控件,来完成我们想要效果了。...下面,就来讲讲自定义控件那些事。 首先,来讲讲Android控件架构。Android控件可以被分为两类,分别是ViewGroup和View。...onDraw()绘制就是canvas对象上调用其一系列方法进行绘图,绘制控件形状。 onMeasure() 下面,来讲讲onMeasure()。...Android坐标系,我们都知道Android屏幕竖屏时候,以左上角位置为原点,向右为x轴正方向,向下为y轴正方向,知道了这个后,我们就可以通过调用getX()和getY()方法可以获取触摸点坐标...每一个方法Log一下,再点击View时候,就会发现方法调用顺序: 首先,调用了ViewGroupA类dispatchTouchEvent()和onInterceptTouchEvent()。

36321

长谈:关于 View Measure 测量机制,让一次把话说完

你不但对自定义 View 没有问题,对于自定义 ViewGroup 也不在话下,你明白 Android 给出 3 种测量模式含义,但是你还是没有来得及去思考,3 种测量模式本身是什么。...我们可以看到自定义 View TestView 代码,我们并没有做测量有关工作,因为我们根本就没有复写它 onMeasure() 方法。...个人觉得,尝试自己动手去实现一个流式标签控件,对于提高自定义 ViewGroup 能力是有很大提高,因为只有自己实践时候,你都会思考,思考和实验过程你才会深刻理解测量机制用途。...针对问题 1: 我们自定义 TestViewGroup 时候, onMeasure() 方法,通过了一个 API 对子元素进行了测量,这个 API 就是 measureChildren()。...是 ViewGroup onMeasure() 调用了 View.measure() 而 View.measure() 调用了 View.onMeasure()。 ? 于是,我们终于明白了。

57120

自定义View Measure过程 - 最易懂自定义View原理系列(2)

前言 自定义View是Android开发者必须了解基础 网上有大量关于自定义View原理文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化 等 今天,将全面总结自定义View...接下来,将详细分析这两种measure过程 3.1 单一Viewmeasure过程 应用场景 无现成控件View满足需求、需自己实现时,则使用自定义单一View 如:制作一个支持加载网络图片...下面将一个个方法进行详细分析:入口 = measure() 若需进行自定义ViewGroup,则需重写onMeasure(),下文会提到 /** * 源码分析:measure() * 作用...即 单一View measure过程onMeasure()具有统一实现,而ViewGroup没有 注:其实,单一View measure过程,getDefaultSize()只是简单测量了宽高值...所以有时候也需重写onMeasure() 自定义ViewGroup,关键在于:根据需求复写onMeasure()从而实现你子View测量逻辑。

86020

android 自定义控件那些事

概述 android应用开发过程,固定一些控件和属性可能满足不了开发需求,所以一些特殊情况下,我们需要自定义控件与属性。而自定义控件通常有两种:自定义View和自定义ViewGroup。...类型布局子视图用View这个函数为空函数。...自定义ViewGroup 讲解如何操作自定义ViewGroup之前我们来看看自定义ViewGroup流程图: ?...自定义ViewGroup尝尝需要覆写onMeasure()和onLayout()等方法,这里不做过多解释,这里说一下其他一些常用方法。...requestLayout() 当布局变化时候,比如方向变化,尺寸变化,会调用该方法,自定义视图中,如果某些情况下希望重新测量尺寸大小,应该手动去调用该方法,它会触发measure()和layout

67880

Android LinearLayout实现自动换行

,因为表哥布局无法确定一行显示多少个ImageView数目,所以无法动态添加,最后自能自己去看看那种能够换行线性布局了,线性布局比较不好是不能自动换行,也就是当设置LinearLayout...ViewGroup控件,如LinearLayout,RelativeLayout,TabHost等等控件,需要自动换行线性布局的话,就需要根据子控件高度与宽度,来动态加载父控件高度与宽度,所以需要在构造函数传入每一个子控件固定高度...将自定义LinearLayout 也继承自ViewGroup 并且重写抽象类ViewGrouop几个方法:onMeasure(),onLayout(),dispathDraw() 三个方法意思分别是...:第一个onMeasure()是用来计算控件以及子控件所占用区域,第二个onLayout()是控制子控件换行,第三个可写可不写,主要是用来绘制控件边框, 自定义LinearLayout代码如下:...super.dispatchDraw(canvas); } } 然后Xml文件引用自己定义控件,Java代码调用: package com.huanglong.mylinearlayout

4.4K51

自定义View | 基础概述 & 自定义TextView实战 & 基于源码分析自定义View继承自ViewGroup时无法正常绘制问题

android:layout_width=""等,是系统自定义属性; res下values目录下新建一个attrs.xml文件: 【系统已经定义属性,不能重新自定义(注意自定义属性命名)】...--style="@style/cstyle" />--> Java逻辑,编写自定义View逻辑: 【注意三个构造函数调用技巧, 把前两个改成this,使得始终调用第三个构造函数...默认没有设置背景时不会画出来(调用onDraw()),下面究其原因 我们自定义TextView时候是extends View去做, 如果extends LinearLayout等ViewGroup...、 且没有设置自定义TextViewbackground的话,【有background还是可以绘制】 自定义TextView就无法正常绘制【不会调用onDraw()方法】; 由下面源码, /...(); 重新计算了相关Flags; 并调用invalidate(true);重绘; 使得ViewGroup得以显示; 解决问题——使得ViewGroup没有设置背景也能正常画出来 思路1 —

1K30

重新复习Android View绘制流程

开始:DecorView被加载到Window 1.Activity里PhoneWindow创建是Activityattach方法,这个方法是ActivityActivityThread被创建之后调用...draw方法通过dispatchDraw来实现,不过这并没有本质区别。...); ... } // 不同ViewGroup子类有不同布局特性,这导致它们测量细节各不相同,如果需要自定义测量过程,则子类可以重写这个方法 protected void onMeasure...onMeasure进行测量,onMeasureview之中有默认实现,一般继承ViewGroup类会重写这个方法来改变测量规则, viewonMeasure调用getDefaultSize来测量尺寸...intrinsicWidth : 0; } 如果View没有设置背景,那么返回android:minWidth这个属性所指定值,这个值可以为0;如果View设置了背景,则返回android:minWidth

36020

自定义View必备知识-View绘制流程

而现在Android手机几乎都没有键盘了,因此基本上只可以使用requestFocus()这个办法来让视图获得焦点了。...ViewGroup,若不重写,就会执行和单子View相同逻辑,不会测量子View。一般会重写onMeasure()方法,循环测量子View。...onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法 自定义View优化策略 为了加速你view,对于频繁调用方法,需要尽量减少不必要代码。...如果可能的话,尽量调用含有4个参数invalidate()方法而不是没有参数invalidate()。没有参数invalidate会强制重绘整个view。...如果你有一个复杂UI,你应该考虑写一个自定义ViewGroup来执行他layout操作。

1.7K30

自定义View二篇,如何自定义一个规范ViewGroup

前言 自定义View开篇,必须跨过一道坎儿 ,我们介绍了自定义View几种方式,以及如何实现一个规范自定义View,上文中也说了,实现一个规范自定义ViewGroup是一件比较困难事情,因为要考虑情况包含...情况,onMeasure处理如下,同自定义View处理一样,不同是我们需要计算子View宽高,代码如下所示: @Override protected void onMeasure(int widthMeasureSpec...布局文件 引用这个ViewGroup,并且添加两个子View,代码如下所示: <com.support.hlq.layout.LinerLayoutView android:layout_width...考虑ViewGrouppadding问题 上面代码,已经实现了最简单垂直排列,我们给LinerLayoutView设置大小为40边距,发现边距并没有生效,所以我们需要在onMeasure以及onLayout...这样一来,我们就定义了一个比较规范ViewGroup,加上我们上篇文章讲自定义属性,相信大家都掌握了自定义View方法了。

44710
领券