6

目前我有几个视图,屏幕分为两个部分

例子:

text1     image1

text2

text3

text4

问题是,如果 image1 很高,它将与左侧的 textview 重叠,所以我使用 to left of 来强制 textview 宽度不超过 imageview 的左侧。

 android:layout_toLeftOf="@id/imageView1" 

但是,每个文本视图都与图像视图的左侧对齐,因为在创建视图之前我不知道它的高度。我希望 imageview 基线以下的所有 textview 删除布局规则android:layout_toLeftOf

所以我搜索解决方案并找到两种方法?

1.onWindowFocusChanged

2.getViewTreeObserver().addOnGlobalLayoutListener

两者都可以获得视图的y轴。

问题是:

 1. what is the difference between them ?

 2. I tried approach 2 , but it is not working, how to fix it? 

代码:

        image.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            ImgY = image.getY();
        }
    });

    lng.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            if (lng.getY() > ImgY) {
                lng.removeRule(RelativeLayout.LEFT_OF);
            }
        }
    });

错误是我想设置一个全局值来存储 imageview 的 y,但它警告The final local variable ImgY cannot be assigned, since it is defined in an enclosing type此外,removeRule 函数返回

 The method removeRule(int) is undefined for the type TextView

非常感谢您的帮助。

4

0 回答 0