如果所有视图都适合屏幕内部,如何以编程方式检查

时间:2016-10-27 20:38:45

标签: android android-layout android-view

我的布局是这样的:

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没有被删除,但如果我然后设置一个短文本,它将被删除。 如果还有其他方法可以解决这个问题吗?

1 个答案:

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