0

我目前正在onMeasure()自定义视图中覆盖该方法,以确保它的宽度和高度相等,并且一切似乎都可以工作,除非父级linearlayout似乎认为它的尺寸没有改变。我目前正在使用覆盖中的setMeasuredDimension()方法onMeasure,以便将宽度强制为测量的高度。viewgroup为了让父母看到这些变化,我还需要做些什么吗?请注意,视图以正确的大小绘制,但父视图组现在延伸到屏幕之外(它没有看到从onMeasure()覆盖中设置的新宽度)。

根据要求,我在下面粘贴了我的 onMeasure() 代码:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    int measuredHeight=getMeasuredHeight();
    setMeasuredDimension(measuredHeight,measuredHeight);

    if(measuredHeight > m_iconType.largestDimension()){
        m_iconType.largestDimension(measuredHeight);
        try {
            Class<?>clazz = Class.forName(m_iconType.iconClassName());
            Constructor<?> constructor = clazz.getConstructor(Integer.TYPE);
            m_iconType.icon((CachedBoardElement)constructor.newInstance(measuredHeight));
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

澄清一下,CachedBoardElement 是一个位图缓存矢量画布,其最大尺寸是在构造过程中设置的;如果视图超过当前最大值,则必须重新创建它。

4

0 回答 0