首页 > 解决方案 > LinearLayout 的问题以及将可见性从 GONE 更改为 VISIBLE

问题描述

我有一个添加到父布局的自定义 LinearLayout。这个父布局可以改变大小,所以我正在听大小变化:

public void onSizeChanged(int w, int h, int oldw, int oldh) {...}

在这个方法中,根据新的大小,我隐藏或显示 LinearLayout 的某些成员:

setVisibility(GONE/VISIBLE);

但是,布局不会自动更新。父布局已调整大小,但 LL 未更新。但是,在我单击一个组件后,布局确实会更新,这会将我带到另一个应用程序并返回屏幕。

我试过用以下方法强制重新绘制:

requestLayout();
forceLayout();
invalidate();

但这不起作用。关于我可能在哪里弄错的任何想法?

编辑:代码示例

线性布局

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);
        }
    }
}

标签: androidandroid-layout

解决方案


推荐阅读