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