我有一个处理方向变化的活动,我想在设备旋转时手动调整布局的大小。在该布局的onLayout,我叫setLayoutParams:Android 2.x setLayoutParams不适用于轮转?
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (changed) {
int orientation = getResources().getConfiguration().orientation;
// Only resize on actual orientation change
if (orientation != mLastOrientation) {
// Apply the new layout size
setLayoutParams(new LinearLayout.LayoutParams(someNewWidth, someNewHeight);
mLastOrientation = orientation;
}
}
}
这对我的新4.x的设备,但在2.x的设备工作正常,则setLayoutParams似乎运行一个方向“迟到”。
因此,在从肖像到风景的第一次旋转中,不会出现调整大小,然后在随后的旋转中,它会显示纵向上的横向大小,横向上的纵向大小等等。
我读了setLayoutParams源代码,它调用requestLayout,它应该重绘布局,但似乎没有立即做到这一点。我也尝试invalidate()哪个也不起作用。
关于为什么setLayoutParams不适用于第一轮或其他解决方案的任何想法?
我的'onMeasure()'函数在旋转时不会改变widthMeasureSpec和heightMeasureSpec的值。 – nicobatu 2014-09-04 22:43:47
我假设我需要自己传递测量值: “如果您需要重写自定义ViewGroup的onMeasure,请更改widthMode,widthSize,heightMode和heightSize,使用MeasureSpec.makeMeasureSpec将它们编译回measureSpecs并传递生成的整数以super.onMeasure“。 – nicobatu 2014-09-04 22:46:12
太棒了,工作!我也必须通过我创建的measureSpecs来衡量我的观点的孩子。谢谢! – nicobatu 2014-09-04 23:38:33