Найти положение элемента в панели действий Android

#android #android-actionbar #android-view

#Android #android-панель действий #android-просмотр

Вопрос:

Есть ли способ найти положение значка на панели действий?

Я использовал приведенный ниже код:

 final View actionBarView = getActivity().getWindow().getDecorView().findViewById(getResources().getIdentifier("action_bar_container", "id", "android"));

if (actionBarView != null) {
    final View buttonInActionBar = actionBarView.findViewById(R.id.menu_item);
    if (buttonInActionBar != null) {
 

Если я установил action_bar_menu_layout следующим образом:

  <item
        android:id="@ id/menu_item"
        MyApp:actionProviderClass="my_provider"
        MyApp:showAsAction="always|withText|collapseActionView"
        android:orderInCategory="0"
        android:title="@string/item_name"/>
 

итак, используя флаг collapseActionView, все работает. Но без этого флага представление не найдено. Похоже, что только в этом случае меню создается с использованием этого идентификатора в качестве идентификатора представления.

Есть ли способ это сделать?

Ответ №1:

Именно так я это и сделал.

Я использовал:

 mItemView = MenuItemCompat.getActionView(menu.findItem(R.id.menu_item));
 

затем я зарегистрировал GlobalLayoutListener и в слушателе:

     @SuppressWarnings("deprecation")
    @Override
    public void onGlobalLayout() {
        mItemView.getLocationInWindow(mMyItemLocation);
        if (mItemView == null || mMyItemLocation[0] == 0  || mItemView.getRight() == 0 || mItemView.getWidth() == 0) {
            return;
        }
        mLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    }