Как получить доступ к координатам значков на панели действий? - PullRequest
0 голосов
/ 02 мая 2020

В руководстве по моему приложению я хотел бы иметь возможность указывать на определенные значки в панели действий, например, с помощью желтой стрелки, указывающей на лампочку на рисунке ниже:

enter image description here

Вот код XML для пунктов меню, показанных на рисунке:

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

<item
    android:id="@+id/AbErase"
    android:icon="@android:drawable/ic_delete"
    android:orderInCategory="10"
    android:title="@string/Erase"
    android:tooltipText="@string/Erase"
    app:showAsAction="ifRoom|collapseActionView"
    />

<item android:id="@+id/AbImmediateImplementation"
    android:title="@string/ImmediateImplementation"
    android:checkable="true"
    android:orderInCategory="20"
    app:showAsAction="never|withText"
    android:enabled="true" />

<item android:id="@+id/AbSuggest"
    android:title="@string/Suggest"
    android:tooltipText="@string/Suggest"
    android:icon="@drawable/ic_lightbulb_outline_white_48dp"
    android:orderInCategory="50"
    app:showAsAction="ifRoom|collapseActionView" />

<item android:id="@+id/AbUndo"
    android:title="@string/ActionBarUndo"
    android:tooltipText="@string/ActionBarUndo"
    android:icon="@android:drawable/ic_menu_revert"
    android:orderInCategory="51"
    app:showAsAction="ifRoom|collapseActionView" />

<item android:id="@+id/AbStep"
    android:title="@string/ActionBarStep"
    android:icon="@drawable/ic_play_arrow_white_24dp"
    android:orderInCategory="100"
    app:showAsAction="ifRoom|collapseActionView" />

.....
</menu>

Вот код, который я использовал чтобы получить View, связанный с элементом меню AbErase :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; mContext adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);

    actionBar.collapseActionView();

    eraseItem = menu.findItem(id.AbErase);
    View eraseItemView = eraseItem.getActionView();
    int eraseItemViewLeft = eraseItemView.getLeft();

    return super.onCreateOptionsMenu(menu);
}

Когда этот код выполняется, eraseItemView равен null . Как я могу получить Left координату каждого отдельного значка в меню?

1 Ответ

0 голосов
/ 05 мая 2020

В конце концов, используя отладчик, я обнаружил, что у показанного выше ToolBar есть 3 дочерних элемента:

  • с индексом 0: ActionMenuView
  • с индексом 1: a Linearlayout, который содержит Spinner
  • в индексе 2: AppCompatImageButton для навигационной кнопки

ActionMenuView имеет 5 дочерних элементов типа ActionMenuItemView. Это значки, которые я искал.

Чтобы указать на левый нижний угол второго значка, я использую этот код:

    ViewGroup overflowMenu = (ViewGroup) scToolbar.getChildAt(0);
    int bulbLeft = overflowMenu.getLeft() + overflowMenu.getChildAt(1).getLeft();
...