2016-12-07 5 views
2

私はAppCompatActivityにActionBarを設定していますので、メニュー項目とオーバーフローメニューの位置を取得するのが大好きです。そのため、ActionBar内の項目を指すツールヒントを持つことができます。私は今、多くの方法を試してきましたが、私はActionBarとツールバーを保持する方法がありますが、そこにあるビューには常にゼロが残っているようです。私はPopupWindowであるツールチップコンポーネントを作成しましたが、これをActionBarに配置することはできますが、メニュー項目の正しい位置を取得する方法を見つけることはできません。これには道がありますか?アクションバーのオーバーフローメニューと他のメニューの位置を取得することはできますか

は、ビューがレイアウトされている前の位置を読み取ろうとしているので、あなたはおそらく、常にゼロトップと左の位置を取得しているあなたに
セーレン

答えて

0

ありがとうございます。

ビューが測定され、レイアウトされたときの位置を取得するには、ViewTreeObserverが必要です。あなたの活動のonCreate()

は、あなたがこのような何かを行うことができます。

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

はい、ほぼ...今toolbar.getOverflowIcon()のgetBounds()幅と高さを持っていますが、その位置が0です、 0。おそらく右揃えになっているので理にかなっているかもしれませんが、マージンやパディングもあり、どこでも見つけることができません。私は他の人がメニュー項目を指しているツールチップを置くのを見ましたが、彼らはどのように位置を取得しますか? – Neigaard

+1

ビューの位置は常にその親を基準にしています。アイコンはおそらくツールバーのコンテナにあります。 'getLocationOnScreen()'および/または 'getLocationInWindow()'を使って画面上のビューの絶対位置を取得したいとします。 – pdegand59

関連する問題