我的布局是这样的:
LinearLayout (linearLayout)
'--TextView (textView1)
'--ImageView (imageView)
'--TextView (textView2)
textView1有时会更改其文本,并且它可能很长,因此它会将textView2的一部分留在屏幕外。我想防止这种情况,所以我想在发生这种情况时从布局中删除imageView。 imageView在计算时可能会显示,也可能不会显示(可能在之前编辑textView1之前已删除)。
这就是我编码的内容:
void changeText(String veryLongString){
textView1.setText(veryLongString);
int [] loc = new int [2];
textView2.getLocationOnScreen(loc);
int bottom = textView2.getMeasuredHeight() + loc[1];
if (imageView.getVisibility() == View.GONE)
bottom += imageView.getHeight();
if (bottom > linearLayout.getMeasuredHeight()){
imageView.setVisibility(View.GONE);
} else {
imageView.setVisibility(View.VISIBLE);
}
}
但由于某些原因,这不能按预期工作,因为看起来好像视图的位置和高度的变化不会立即发生。当我调用getMeasuredHeight()和getLocationOnScreen()时,我会在我刚刚做出的更改之前获取值。我得到的结果是,如果我设置一个非常大的文本imageView没有被删除,但如果我然后设置一个短文本,它将被删除。 如果还有其他方法可以解决这个问题吗?
答案 0 :(得分:1)
即使我认为这不是正确的方法(您可以在XML中执行各种操作,因此您不必介入Java代码),这里有一个快速示例,说明您可以执行的操作来自Java(例如,在您的onStart()
方法中)
ViewGroup group = (ViewGroup) findViewById(R.id.myLayout);
int groupHeight = group.getHeight();
for (int i = 0; i < group.getChildCount(); i++) {
groupHeight -= group.getChildAt(i).getHeight();
if (groupHeight < 0) {
// they don't fit in the layout
myImageView.setVisibility(View.GONE);
}
}