У меня есть пользовательский LinearLayout, который добавляется в родительский макет. Этот родительский макет может изменить размер, поэтому я слушаю изменение размера с помощью:
public void onSizeChanged(int w, int h, int oldw, int oldh) {...}
В этом методе, согласно новому размеру, я скрываю или показываю определенные члены LinearLayout с помощью:
setVisibility(GONE/VISIBLE);
Однако макет не обновляется автоматически. Размер родительского макета изменяется, но LL не обновляется. Однако макет обновляется после того, как я щелкаю компонент, что переводит меня в другое приложение и возвращается на экран.
Я пытался заставить перерисовать:
requestLayout();
forceLayout();
invalidate();
Но это не работает. Есть идеи, где я могу ошибаться?
Редактировать: пример кода
LinearLayout
public class MyLayout extends LinearLayout {
TextView tv1, tv2, tv3;
ImageView iv1;
public MyLayout(Context context) {
super(getContext());
setOrientation(VERTICAL);
tv1 = new TextView(getContext());
tv2 = new TextView(getContext());
tv3 = new TextView(getContext());
LinearLayout.LayoutParams tvParams = new LayoutParams(MATCH_PARENT, WRAP_CONTENT);
iv1 = new ImageView(getContext());
LayoutParams ivParams = new LayoutParams(MATCH_PARENT, 0);
ivParams.weight = 1;
addView(tv1, tvParams);
addView(iv1, ivParams);
addView(tv2, tvParams);
addView(tv3, tvParams);
}
public void onSizeChanged(int w, int h, int oldw, int oldh) {
int heightDp = (int) (h / DENSITY);
if (heightDp <= 250) {
tv1.setVisibility(GONE);
tv2.setVisibility(GONE);
tv3.setVisibility(GONE);
} else if (heightDp <= 350) {
tv1.setVisibility(VISIBLE);
tv2.setVisibility(VISIBLE);
tv3.setVisibility(GONE);
} else {
tv1.setVisibility(VISIBLE);
tv2.setVisibility(VISIBLE);
tv3.setVisibility(VISIBLE);
}
}
}