2017-12-06 5 views
0

私はすべての項目 'showAsActionifRoomに設定されたメニューを持っています。今、これらのメニュー項目の中心の正確な位置(x、y)を取得したいと思います。MenuItemの位置を動的に見つける

まず、この情報を基になるビューから取得することを考えましたが、特定のメニュー項目の表示に確実にアクセスする方法がわかりません。 onCreateOptionsMenu

MenuItem someItem = menu.findItem(R.id.some_action); 
// someItem.getX(); 
// someItem.getY(); 

私は、これらの座標は、アプリケーションのToolbarからの相対であることを期待したいです。この場合、中心座標を計算するにはsomeItem.get{Width,Height}()にアクセスする必要があります。

例メニュー:

<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item 
    android:id="@+id/action_search" 
    android:title="@string/action_search" 
    android:icon="@drawable/ic_search" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="ifRoom|collapseActionView" /> 

<item 
    android:id="@+id/action_example" 
    android:title="@string/action_example" 
    android:icon="@drawable/ic_example" 
    app:showAsAction="ifRoom" /> 

</menu> 
+0

この使用してみてください:https://stackoverflow.com/questions/16631806/getting-screen-coordinate-of-action-bar-menu-item-for-creating-introduction-screを –

答えて

0

ソリューションがインスタンス化ビューを見つけるために、基本的な活動を使用することです。

View menuItemView = getActivity().findViewById(R.id.action_search); 

そして位置は、ビューのウィンドウに(x、y)を比較して返す、View.getLocationInWindow(intArr)を使用して、ツールバーに対して抽出することができます。

int[] itemWindowLocation = new int[2]; 
menuItemView.getLocationInWindow(itemWindowLocation); 

int[] toolbarWindowLocation = new int[2]; 
toolbar.getLocationInWindow(toolbarWindowLocation); 

int itemX = itemWindowLocation[0] - toolbarWindowLocation[0]; 
int itemY = itemWindowLocation[1] - toolbarWindowLocation[1]; 
int centerX = itemX + menuItemView.getWidth()/2; 
int centerY = itemY + menuItemView.getHeight()/2; 
関連する問題