레이아웃 xml에 GONE
으로 설정된 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 :
나는이 방법을 시도하고 포기했다. 대신 애니메이션을 사용하여 작동 시켰습니다. 감사합니다 :)
어떤 애니메이션을 사용했는데 동일한 문제가 있습니다. 너비와 높이를 업데이트하고 싶습니다. 알려주십시오. – Ravi
그 애니메이션을 사용하는 방법을 알려주세요. webview 매개 변수를 seeting하고 있지만 높이 매개 변수가 업데이트되지 않습니다. – Ravi
문제를 이해할 수 없지만 애니메이션을 확장하는 클래스를 만들고 해당 클래스에서 뷰의 높이/너비를 변경하십시오. 어쩌면 새로운 질문을 만들어야 자신을 분명히하고 다른 사람들로부터 더 나은 답변을 얻을 수 있습니다. – JrL