addOnGlobalLayoutListener和onWindowFocusChanged之间的区别?

时间:2013-08-02 02:31:40

标签: android android-layout textview imageview relativelayout

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

示例:

text1     image1

text2

text3

text4

问题是,如果image1很高,它将与左侧的textview重叠,所以我用左边的方法强制textview宽度不超过imageview的左边。

 android:layout_toLeftOf="@id/imageView1" 

但是,每个textview都与imageview的左边对齐,因为在创建视图之前我不知道它的高度。我希望在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

非常感谢你的帮助。

0 个答案:

没有答案