GONE
レイアウト xml に設定されている LinearLayout(A) があります。私が達成したいのは、ボタン(B)がクリックされると、LinearLayout(A)が設定されVISIBLE
、その高さを取得して親レイアウトの高さを更新することです。LinearLayout(A) を可視に設定し、その高さを取得することもできましたが、親レイアウトの高さを直接更新できませんでした。私の現在のコードの問題は、別の UI イベントがトリガーされた後にのみ親レイアウトが更新されることです (スピナー ドロップダウン メニューが開かれる、ソフト キーボードが表示されるなど)。私が本当に欲しいのは、ボタン(B)がクリックされた直後に親レイアウトが更新されることです。
これが私のコードです。
@Override
public void onClick(View v) {
if(v==buttonB) {
ShowLinearLayoutA();
}
}
private ViewTreeObserver vto;
private void ShowLinearLayoutA() {
LinearLayoutA.setVisibility(View.VISIBLE);
if (vto == null) {
vto = LinearLayoutA.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ParentLayout.getLayoutParams().height=LinearLayoutA.getHeight();
ParentLayout.invalidate();
}
});
}
}
私は何を間違えましたか?
英語で失礼します。よろしくお願いします。
EDIT 1:使ってみrunOnUiThread
ましたが、うまくいきません
私の編集したコード
private void ShowLinearLayoutA() {
LinearLayoutA.setVisibility(View.VISIBLE);
if (vto == null) {
vto = LinearLayoutA.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ParentLayout.getLayoutParams().height=LinearLayoutA.getHeight();
runOnUiThread(new Runnable() {
@Override
public void run() {
ParentLayout.invalidate();
}
});
}
});
}
}
編集2:
この方法は諦めました。代わりに、アニメーションを使用して動作させました。ありがとう :)