Проблема с LinearLayout и изменением видимости с GONE на VISIBLE - PullRequest
0 голосов
/ 29 октября 2018

У меня есть пользовательский 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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...