我目前正在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 是一个位图缓存矢量画布,其最大尺寸是在构造过程中设置的;如果视图超过当前最大值,则必须重新创建它。