我有一个包含所有项目的菜单' showAsAction
设置为ifRoom
。现在我想得到任何这些菜单项中心的确切位置(x,y)。
我首先考虑从基础视图中获取此信息,但我不知道如何可靠地访问特定菜单项的视图。
在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 :(得分:2)
解决方案是使用基础活动来查找实例化视图。
View menuItemView = getActivity().findViewById(R.id.action_search);
然后可以使用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;
相对于视图的窗口返回(x,y)。
mNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
showNextQuestion();
}
});
mPrevious.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
showPreviousQuestion();
}
});
private void showNextQuestion() {
showQuestion(1);
}
private void showPreviousQuestion() {
showQuestion(-1);
}
private void showQuestion(int increment) {
int newQuestionNumber = mQuestionNumber + increment;
if (newQuestionNumber >= 0 && newQuestionNumber < mQuestionLibrary.getLength()) {
mQuestionNumber = newQuestionNumber;
mQuestionText.setText(mQuestionLibrary.getQuestion(mQuestionNumber));
}
}