Android自定义控件在scrollview中设置高度不起作用,已经重写了 onMeasure方法 3C

布局:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/title_template"
            android:layout_width="match_parent"
            android:text="hahahah"
            android:layout_height="700dp" />

        <com.tky.mpchart.View.BarChart2View
            android:id="@+id/fl_chart2"
            android:layout_below="@+id/title_template"
            android:layout_width="match_parent"
            android:layout_height="600dp" />
    </RelativeLayout>
</ScrollView>

    自定义控件:

     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    this.setMeasuredDimension(this.measureWidth(widthMeasureSpec), this.measureHeight(heightMeasureSpec));
}

private int measureWidth(int measureSpec) {
    int result = 100;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);
    if(specMode == 1073741824) {
        result = specSize;
    } else if(specMode == -2147483648) {
        result = Math.min(result, specSize);
    }

    return result;
}

private int measureHeight(int measureSpec) {
    int result = 100;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);
    if(specMode == 1073741824) {
        result = specSize;
    } else if(specMode == -2147483648) {
        result = Math.min(result, specSize);
    }

    return result;
}
0

2个回答

你把RelativeLayout的高度改成wrap_content看看

0
qq_23146625
qq_23146625 已经解决了,是硬件加速问题。关闭就好了,谢谢。。。
3 年多之前 回复

你的吧ScrollView 里面的那层换成linearlayout

http://blog.sina.com.cn/s/blog_6cf2ea6a0102v61f.html

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
自定义控件 继承View 使用OnMeasure定义控件宽高
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWH(widthMeasureSpec, 0), measureWH(heightMeasureSpec, 1)); }setMeasuredDimension(width,he
Android自定义控件之onMeasure详解
  在Android开发中往往需要根据需求对原生控件进行自定义,其中主要涉及到的就是onMeasure,onLayout和onDraw三个方法的重写与使用,其中onMeasure是其中最复杂的一个方法,很多程序员仅仅知道该方法用来测量大小,却不知道何时调用,如何去用,本文就对利用Linearlayout的源码来解析onMeasure. 1.何时调用onMeasure  onMeasure方法的作用...
直接继承View来自定义控件时,需要重写onMeasure()方法并设置wrap_content时的大小 原理分析
         在开始本篇的正文之前,请允许我先粗略的解释一下MeasureSpec的作用,对本篇的理解会有帮助,但是关于View绘制的流程,本篇暂时不多做介绍了,对View的绘制流程还不是很熟悉的同学,请先通过一些书籍或者其他的博客了解一下View绘制的流程。下面开始:       MeasureSpec可以理解成是View测量的说明书吧,一个View的MeasureSpce受到本身的Lay...
自定义控件:onMeasure 方法和测量原理的理解
前言众所周知,自定义 ViewGroup 中这几个方法非常重要:onMeasure, onLayout。初学者学习自定义 View 时,想必对 onMeasure 比较困惑,onMeasure 是什么,为什么要测量,怎么测量?网上有很多关于 onMeasure 的文章,诸如《onMeasure 详解xxx》、《onMeasure xxx源码分析》。好像都不能彻底解决心中的疑惑。本文就从“是什么”,“
Android自定义控件onMeasure方法简单的重写
写一个自定义控件,只写了onDraw方法,在XML文件中使用,设置宽高为wrap_content,发现在canvas上画的内容很少,但canvas占的空间是整个屏幕,其它控件被覆盖了, 因为对自定义控件使用的也不是很熟练,所以猜测是因为没有重写onMeasure方法,后面在网上找了下资料,试着去重写了onMeasure方法,将问题解决,在此做个记录,以便 以后查看。        下面以测量控
onMeasure简单方法 完美解决ListView与ScollView冲突问题!
近期做项目碰到ScrollView与Listview冲突的情况,查看了网上一些解决listview和scollView的冲突的方法,最终选择了重写onMeasure的方法来解决这个问题。 在此对各种方法个人做一个总结评价。 主要的方法有四种: 1、手动设置ListView高度(比如把高度设置为200dp) 评价:特别简单无脑,但是大大提高了代码的耦合性,比较适合“图方便”的新手。
Android7.0 自定义控件addView(...)无效,View的绘制流程(onMeasure、onLayout等)完全没执行的解决办法。
问题描述昨天在写一个自定义控件的时候遇到一个问题,就是我通过addView(View child) 方法添加View之后再7.0上没有显示出来,6.0上没有问题。通过AS自带的Layout Inspector工具检查发现我的自定义控件的宽高都是0,并且getVisibility()==VISIBLE,也就是说控件是显示的,只是没有宽高所以看不到。 先看下我addView的代码吧:void setF
自定义控件(ScrollView的重写)
版权声明:欢迎转载,转载请注明出处http://blog.csdn.net/qian_xiao_lj 实现两个ScrollView的同步显示。因为Android控件中没有此种功能,因此需要重写ScrollView。 思路介绍   我们首先想到使用ScrollView的类似与setOnScrollChangedListener的方法来实现,当一个ScrollView滚动
自定义的scrollview嵌套listview时重写onMeasure的原因
在项目开发中,可能经常遇到嵌套ListView、ScrollView的问题,百度一搜,都是现成的代码,而且都是一样的,就是重写onMeasure方法,但是为什么要那么写,估计就没多少人知道了,这里进行深入的剖析一下下,重点看onMeasure方法,代码如下: public class ExpandListView extends ListView { ...
android 解决vedeoView设置高度无效的问题
在android中,是不允许给VideoView自行设置高度的,宽度是可以的,所以只能通过自定VideoView来设置高度,具体步骤如下: 1.在项目的values文件夹下建立文件attrs.xml,在里面添加如下内容: 2.在布局文件中添加改自定义组件: <RelativeLayout and
自定义View控件之onMeasure方法详解
前言转载请注明出处! 这类的文章很多很多,其实我也是不想写的.但是说起来我虽然看了很多很多的文章,但是对于View控件的measure方法还是一知半解的.那么今天我就来做一个总结,并且解决很多人问我的一些常见的问题.下面先把一些常见的问题罗列一遍 View控件中的measure方法被父容器调用,会引发测量的整个过程,也就有了onMeasure方法 父容器调用measure方法放在下
自定义View的wrap_content属性失效问题详解
自定义View的wrap_content属性失效问题详解
自定义View之 onMeasure() view的高度自适应wrap_content view的测量
在很多自定义view之后,控件的高度需要自适应,即使使用wrap_content没有作用还是match_parent的效果,这时就需要重写onMeasure()方法来实现,view类的onMeasure()方法默认是只支持.EXACTLY模式,所以在自定义view先支持wrap_content就得重写onMeasure(),在这里就需要说一下测量的三种模式了: 第一种: EXACTCLY 大
在重写的onMeasure()函数中,getMeasured的返回值为0,怎么解决?
-
Android自定义View进阶——绘制异形图+onMeasure宽高约束
前言 玩过自定义View的小伙伴都知道,在View的绘制过程中,有一个类叫做Path,Path可以帮助我们实现很多自定义形状的View(总有奇葩View等着我们),特别是配合xfermode属性来使用的时候。进入正题,本篇文章有两个重点: 1、Path类中那几个常用的API及效果展示 2、顺带简单的讲解一下onMeasure方法宽高约束   1.moveTo moveTo表示将绘制...
自定义View中onMeasure在wrap_content时的处理
今天看书,看到了关于自定义View的技巧,其中关于onMeasure这个方法是必须覆盖的。原因何在?因为在view的onMeasure方法中,有一个getDefaultSize的方法。方法中,对于AT_MOST和EXACTLY的处理是一样的。当然这些点都可以在网上找到相关的介绍。代码如下 public static int getDefaultSize(int size, int measure
google官网自定义控件实例
google官方的自定义控件实例,重写了onMeasure,onDraw方法以及自定义属性的使用。
自定义控件初学篇——onMeasure()和onLayout()方法
通过自定义View,我们可以画出一些简单的图形并进行应用。上一篇中我讲了自己对onDraw()方法的一些理解和运用,今天就来讲讲onMeasure()和onLayout()两个方法的理解和使用。在自定义View当中呢,我们对于onMeasure()和onLayout()方法基本上是不需要重写的,所以我这边...
android中scroll中的listview高度重新计算
大家都知道在ScrolleView中使用ListView需要计算listview每个item的高度,不然的话,listview只会显示一个item。所以我在初始化的时候调用了下面的方法计算了listView  item 的高度: // 获取ListView对应的Adapter ListAdapter homeAdapter = listView.getAdapter(); if (ho
Android开发之自定义控件(一)---onMeasure详解
坚持。。。
Android自定义View(三、深入解析控件测量onMeasure)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51468648 本文出自:【openXu的博客】 目录:onMeasure什么时候会被调用 onMeasure方法执行流程 MeasureSpec类 从ViewGroup的onMeasure到View的onMeasure ViewGroup中三个测量子控件的方法 getChi
ListViewForScrollview
解决listview嵌套scrollView无法完全显示的问题。仅仅是重写了OnMeasure的方法。保留了listview的其他方法。
ScrollView嵌套Gridview显示不全的问题
在开发过程中,遇到ScrollView嵌套GridView时会遇到GridView的内容显示不完全的问题,解决的方法就是先获取gridview的高度然后让ScrollView给其预留合适的尺寸,我们可以自定义GridView,重写onMeasure()方法,来解决:/** * Created by wk on 2017/3/3. * 解决ListView中嵌套gridview显示不全问题 */
android 8.0 自定义控件onmesure获取宽度为0
最近项目需要适配8.0版本,自定义控件出现了下面的问题 第一次显示此弹窗字体出现了偏移,找到原因是textpaint在绘制文字的时候 canvas.drawText(itemText, x + (controlWidth / 2) -textRect.width()/2, height, textPaint); 其中controlwidth宽度也就是控件宽度为0. ...
自定View之自己绘图_两个重要方法onDraw/onMeasure设置View最终宽高
package com.example.desktop_77ma6t9.kaoshi; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.support.annota
android自定义控件宽高的获取
前几天,在自定义控件的时候碰到个问题,就是在如何获取自定义控件的高宽。在自定义控件类的构造函数中,本来以为可以轻松获取,但事实不是这样。我测试了下面代码: 先是布局代码: 再是MyView的构造函数的代码: public MyView(Context context, AttributeSet attrs) { super(context, attrs); a=&quot;在MyVie...
Android 关于ScrollView的子布局无法设置高度的问题
由于Scrollview 的作用是滑动显示 所以他的子布局 必须设置 wrap。。。。。 而且只能有一个 之后可以随意布局
解决:ScrollView嵌套ListView导致无法正确计算ListView的高度之动态加载图片高度常规方法失效。
上述问题很多人都遇到过。相信很多人都用过网络常见的解决方法 ,即重写ListVIew的onMeasure方法。这种方式可以禁止ListView响应滑动事件   并且还能让ListView正确计算高度。 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpe
Android自定义控件无法通过代码修改大小、高宽,setMinimumHeight无效的问题
首先在理解我为什么这么写之前,请阅读一篇前人的文章:http://blog.csdn.net/a396901990/article/details/36475213 这篇文章详细的分析了一下onMeasure函数的源码和用法。通过阅读这篇文章我才得到了启示。再次感谢一下这个博主。 进入正题~ 随着开发的深入越来越多的控件需要自己去写去画,也就是我们常说的自定义控件。但是相信很
在onMeasure中获取已测量的子控件的宽高
不能使用child.getWidth();因为这个用right - left得到的,在onMeasure中都还没布局控件树,那些位置参数都为0.只能通过child.getMeasureWidth();
关于Scrollview嵌套RecyclerView高度显示不全
前言做 Android开发我们经常会遇到这种ScrollView嵌套Listview或者 嵌套RecyclerView的需求,当我们搜索解决方案时经常会遇到这句话you should never put a scrollable view inside another scrollable view虽然很多人不推荐这种方法,但是总有一些人(比如我)面对产品设计的一些奇葩界面不得不采用这种方案,今天我
android 在自定义view中获取屏幕宽度,并设置自定义控件位置
/** * 得到屏幕宽度 * * @return */ private int getScreenWidth() { WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); DisplayMetrics displayMetric...
约束布局constraint layout下自定义正文形的坑
在学习自定义矩形的时候,在onMeasure中定义正方形使用较短的那条边作为边长,在约束布局下调用此自定义view时,设计width为20dp,宽为match_parent时发现setMeasuredDimension(width,height)失效,打印width和height时发现两值相等。而在显示时发现height仍然填充整个布局。解决:constraint中对应match_parent的是...
解决滑动冲突和自定义控件中对onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法的理解
package com.crs.demo.view; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.View; import android.widget.ListView; /** * Created
ScrollView嵌套GridView不能滚动的问题解决方案
ScrollView嵌套GridView不能滚动的问题解决方案,重写GridView方法使其不能滚动,就不会与ScrollView的滚动冲突,从而解决问题
ScrollView设置子View的高度为match_parent,无效
最近用到了ScrollView嵌套。需要将子ViewGroup填充满ScrollView。所以就将子ViewGroup的高度设置为match_parent。But,完全没有作用呀。我就郁闷了。怎么改都不行。我就觉得ScrollView有鬼。知己知彼,百战不殆。我决定打入敌人内部,看看到底为什么。 果然有问题。就是这个,将子ViewGroup的高度控制权夺走了。自己打起了自己的小算盘。
自定义控件View之onMeasure调用时机源码分析
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 先上测试代码: MainActivity.java import android.app.Activity; import android.os.Bundle; import android.util.Log; pu...
ScrollView高度测量原理
       在使用Lint扫描工程时,看到这个提示。 Google推荐将ScrollView的子View高度设置为wrap_content,  但实际业务开发时可能根节点是LinearLayout(layout_height=&quot;match_parent&quot;), 然后发现屏幕显不下就包了一层ScrollView。 运行看到ScrollView能正常上下滑动,就没改LinearLayout的layou...
ScrollView和HorizontalScrollView中添加的自定义View控件无法显示问题
一般自定义View控件,都要重写onMeasure(int widthMeasureSpec, int heightMeasureSpec)和onDraw(Canvas canvas)两个方法,其中onMeasure方法的作用是计算控件的大小,onDraw方法的作用是显示控件的内容。 因为onDraw方法网上都有很多教程,所以本文不讲。本文重点讲解的是onMeasure这个实用性很强,但又容易出现
Android获取View的宽高与View.measure详解
Android获取View的宽高与View.measure详解