2

Warum verwenden wir ViewTreeObserver, bitte kann es jemand erklären?Warum verwenden wir ViewTreeObserver # addOnGlobalLayoutListener()

Im folgenden Code creditsView ist TextView Objekt. Durch diesen ganzen Code verstehe ich, dass "dies ist etwas Text basierend auf der Bedingung zu verbergen", aber nur das ist der Grund, warum wir ViewTreeObserver verwenden?

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

Antwort

2

Wenn Sie nicht ViewTreeObserver benutzt hatten, als mainLayout.getRootView().getHeight() würde einfach 0px zurückkehren, weil es noch nicht gelegt wurde (siehe getWidth() und getHeight() von View 0 zurückgibt).

So warten Sie, bis die Ansicht gemessen, ausgelegt und dann die Werte für Breite/Höhe abgerufen werden. Dieser Rückruf wird genau dann ausgelöst, wenn die Ansicht auf dem Bildschirm angezeigt wird.

+0

danke #azizbekian –

+0

@PrasanthYejje, als ein Neuling, als jemand antwortet auf Ihre Frage, und Sie sind mit der Antwort zufrieden, markieren Sie die Antwort als akzeptiert. – azizbekian

+0

ok Bruder @azizbekian –

Verwandte Themen