2 qq 23146625 qq_23146625 于 2016.03.15 09:32 提问

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;
}

2个回答

u011249920
u011249920   2016.03.15 10:45

你把RelativeLayout的高度改成wrap_content看看

qq_23146625
qq_23146625 已经解决了,是硬件加速问题。关闭就好了,谢谢。。。
2 年多之前 回复
lxk_1993
lxk_1993   Rxr 2016.03.15 19:17

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

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android自定义控件之测量onMeasure
当Android原生控件无法满足开发需求时,需要自己来创造view,自定义控件。自定义控件分三步来完成:测量(onMeasure),布局(onLayout),绘制(onDraw)。今天主要介绍自定义流程的第一步-测量,通常一个布局文件的控件的简单嵌套,显示如下: LinearLayout里面有两个子view:TextView,RelativeLayout(里面又有两个TextView
Android自定义控件onMeasure方法简单的重写
写一个自定义控件,只写了onDraw方法,在XML文件中使用,设置宽高为wrap_content,发现在canvas上画的内容很少,但canvas占的空间是整个屏幕,其它控件被覆盖了, 因为对自定义控件使用的也不是很熟练,所以猜测是因为没有重写onMeasure方法,后面在网上找了下资料,试着去重写了onMeasure方法,将问题解决,在此做个记录,以便 以后查看。        下面以测量控
Android自定义控件之onMeasure
在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置 3.绘制——onDraw():如何绘制这个View。 而第3步的onDraw系统已经封装的很好了,基本不用我们来操心,只需要专注到1,2两个步骤就中好了。 而这篇文章就来谈谈第一步,也是十分关键得一步:“测量(Measure)”
自定义的scrollview嵌套listview时重写onMeasure的原因
在项目开发中,可能经常遇到嵌套ListView、ScrollView的问题,百度一搜,都是现成的代码,而且都是一样的,就是重写onMeasure方法,但是为什么要那么写,估计就没多少人知道了,这里进行深入的剖析一下下,重点看onMeasure方法,代码如下: /** * Created by hailonghan on 15/5/28. */ public class ExpandListV
Android 自定义控件源码分析----谈Android自定义控件中 onMeasure()方法处理 wrap_content 情况的必要性
这是一篇与 Android 自定义控件相关的源码分析的文章. 主要从源码的角度分析自定义控件时, onMeasure() 方法处理其宽或高在布局文件中被设置为 wrap_content 时的必要性.
Android自定义控件系列七:详解onMeasure()方法中如何测量一个控件尺寸(一)
详细研究Android中自定义控件中用到的measure/onMeasure方法是如何实现测量控件大小,如何传递参数的。
Android开发之自定义控件(一)---onMeasure详解
坚持。。。
android ScrollView 中子控件设置高度后不起作用的解决方法
http://blog.csdn.net/ljb_blog/article/details/9311991 Romain Guy write a little info about a ScrollView attribute that is missing  from documentation :Android:fillViewport=”true” . It must
自定义控件:onMeasure 方法和测量原理的理解
前言众所周知,自定义 ViewGroup 中这几个方法非常重要:onMeasure, onLayout。初学者学习自定义 View 时,想必对 onMeasure 比较困惑,onMeasure 是什么,为什么要测量,怎么测量?网上有很多关于 onMeasure 的文章,诸如《onMeasure 详解xxx》、《onMeasure xxx源码分析》。好像都不能彻底解决心中的疑惑。本文就从“是什么”,“
自定义控件 继承View 使用OnMeasure定义控件宽高
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWH(widthMeasureSpec, 0), measureWH(heightMeasureSpec, 1)); }setMeasuredDimension(width,he