android - 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);
}
}
}
解决方案
推荐阅读
- python-3.x - 字符串到数组列表,有可能吗?
- sql - 在包含空值的同时加入 2 个表
- typescript - TypeScript 在使用 @ts-check 访问 JavaScript 文件中未定义的全局对象时没有显示错误
- mongodb - 使用 mongoose 过滤 mongodb 查询
- android - 设备未通过 SIG 的蓝牙认证,如何在不违反认证执行的情况下提供技术指导?
- xaml - 在 Caliburn Micro 中将 xaml UserControl 与视图模型重用
- php - 更改 wp_comment_post 名称且无重定向
- python - 如何在 Django 中从一个类中呈现一个表,该类具有为实例选择的所有字段的 manytomanyfield?
- ios - 可以在不支付 App Store 年度订阅费的情况下将 iOS 应用程序安装在数以百万计的设备上吗?
- javascript - 如何在离线模式下自动测试 Service Worker?尝试赛普拉斯