2

爲什麼我們用ViewTreeObserver,請大家能解釋一下嗎?爲什麼我們使用ViewTreeObserver#addOnGlobalLayoutListener()

以下代碼creditsViewTextView對象。通過這整個代碼,我明白「這是爲了隱藏一些基於條件的文本」,但唯一的原因是我們爲什麼使用ViewTreeObserver

mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int heightDiff = mainLayout.getRootView().getHeight() - mainLayout.getHeight(); 

      if (heightDiff > 100) { 
       Utils.appLogger("MyActivity", "keyboard opened"); 
       creditsView.setVisibility(View.GONE); 
      } 

      if (heightDiff < 100) { 
       Utils.appLogger("MyActivity", "keyboard closed"); 
       creditsView.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 

回答

2

如果你沒有使用ViewTreeObserver,比mainLayout.getRootView().getHeight()只會返回0像素,因爲它尚未制定出來呢(見的getWidth()和getHeight()的視圖返回0)。

因此,您正在等待,直到視圖被測量,佈局,然後您從中獲取寬度/高度值。這個回調將在視圖將被放置在屏幕上時正好觸發。

+0

thankyou #azizbekian –

+0

@PrasanthYejje,作爲一個新人,有人回答你的問題,並且你對答案感到滿意,請將答案標記爲已接受。 – azizbekian

+0

好兄弟@azizbekian –