我有一個處理方向變化的活動,我想在設備旋轉時手動調整佈局的大小。在該佈局的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