6

現在、いくつかのビューがあり、画面は 2 つのセクションに分かれています

例:

text1     image1

text2

text3

text4

問題は、image1 が tall の場合、左側の textview と重なるため、 to left of を使用して textview の幅が imageview の左を超えないようにすることです。

 android:layout_toLeftOf="@id/imageView1" 

ただし、ビューが作成されるまで高さがわからないため、すべてのテキストビューはイメージビューの左側に配置されます。そして、イメージビューのベースラインの下にあるすべてのテキストビューで、レイアウトルールを削除したいandroid:layout_toLeftOf

だから私は解決策を探し、2つの方法を見つけますか?

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

エラーは I would like to set a global value to store the y of imageview ですが、警告が表示され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