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 –