私のアクティビティでは、線形垂直レイアウトで3つのビューがあります。上部と下部のビューは固定された高さを持ち、中央のビューは利用可能なままの高さをとります。これは私がビューのサイズを設定する方法である:Activity.onConfigurationChangedでビューの再描画を強制する方法
void resize(int clientHeight)
{
int heightMiddle = clientHeight - heightTop - heightBottom;
topView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, heightTop));
middleView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, heightMiddle));
bottomView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
}
clientHeightを得るために、私はonMeasure()関数をオーバーライドし、(サイズ変更を呼び出す)私のオーバーライドされたonMeasure()関数内。これはonCreate()でうまくいきます。しかし、電話の向きが変わっても動作しません。私が観察したことは、onCreate()、onMeasure()が2回呼び出された後です。 onConfigurationChanged()の後、onMeasure()は一度だけ呼び出され、サイズ変更コードは有効になりません。マイクルーゲソリューションをセットアップするために、後にサイズを変更する()は20msを呼び出すためのタイマーです:
UiTaskは、単に()のサイズを変更する呼び出しますtimer.schedule(new TimerTask()
{
@Override
public void run()
{
activity.runOnUiThread(new UiTask());
}
}, 20);
。これは私にとってはうまくいくが、よりよい解決策が必要だと感じている。誰かがこれにいくつかの光を当てることができますか?
完璧なソリューション。ありがとうございました! –