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();
}
});
}
}
我做错什么了 ?
请原谅我的英语,并提前非常感谢您。
编辑 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:
我放弃了尝试这种方法。相反,我使用动画并让它工作。谢谢 :)