2016-12-07 3 views
2

Ich habe ein ActionBar-Setup in meiner AppCompatActivity und möchte gerne die Position der Menüelemente und des Überlaufmenüs abrufen. damit ich eine QuickInfo auf jedes Element in der ActionBar zeigen kann. Ich habe jetzt viele Möglichkeiten ausprobiert, und ich habe eine Möglichkeit, die ActionBar und die Toolbar zu erreichen, aber es scheint, dass darin enthaltene Ansichten immer eine Null hinterlassen und so weiter. Ich habe eine Tooltip-Komponente erstellt, die ein PopupWindow ist, und ich kann dies über die ActionBar kein Problem, aber ich kann nicht herausfinden, wie Sie die richtige Position der Menüpunkte erhalten. Gibt es einen Weg dazu?Kann ich die Position des Überlaufmenüs und eines anderen Menüs in der Aktionsleiste abrufen

Danke
Søren

Antwort

0

Sie sind wahrscheinlich immer eine Null obere und linke Position bekommen, weil Sie die Position zu lesen versuchen, bevor der Blick aus gelegt.

Um die Position zu erhalten, wenn die Ansichten gemessen und Layout, müssen Sie ViewTreeObserver.

In Ihrer Tätigkeit des onCreate(), Sie so etwas tun kann.

toolbar.getViewTreeObserver().addOnPreDrawListener(
     new ViewTreeObserver.OnPreDrawListener() { 
      @Override 
      public boolean onPreDraw() { 
       toolbar.getViewTreeObserver().removeOnPreDrawListener(this); 

       // here you can get the real position of each menu item and position your Popup 
       return true; 
      } 
     }); 
+0

Ja fast ... Nun ist die toolbar.getOverflowIcon() getBounds() eine Breite und Höhe, aber seine Position ist 0, 0. Nun, das könnte Sinn machen, weil es wahrscheinlich richtig ausgerichtet ist, aber es gibt auch einen gewissen Rand oder Abstand, der ebenfalls ins Spiel kommt, und ich kann nirgends finden, um diese Werte zu bekommen. Ich habe gesehen, wie andere Tooltips auf einen Menüeintrag zeigen, aber wie bekommen sie die Position? – Neigaard

+1

Die Position einer Ansicht ist immer relativ zu ihrem übergeordneten Element. Ihr Symbol befindet sich wahrscheinlich in einem Container in der Symbolleiste. Sie möchten 'getLocationOnScreen()' und/oder 'getLocationInWindow()' verwenden, um die absolute Position der Ansicht auf dem Bildschirm zu erhalten. – pdegand59

Verwandte Themen