TransWikia.com

PopupMenu по нажатию на кнопку

Stack Overflow на русском Asked by Karpuha on January 23, 2021

Хочу сделать меню которое будет появляться по нажатию на кнопку. Нашёл в Material Components то что мне нужно, там оно называется Popup menu with icons но при написании кода вызвало затруднение данная строка:

iconMenuButton.setOnClickListener(v -> showMenu(v,
R.menu.menu_with_icons));

При нажатии на showMenu меня перекидывает на следующий фрагмент

 @SuppressWarnings("RestrictTo")
  private void showMenu(View v, @MenuRes int menuRes) {
    PopupMenu popup = new PopupMenu(getContext(), v);
    // Inflating the Popup using xml file
    popup.getMenuInflater().inflate(menuRes, popup.getMenu());
    // There is no public API to make icons show on menus.
    // IF you need the icons to show this works however it's discouraged to rely on library only
    // APIs since they might disappear in future versions.
    if (popup.getMenu() instanceof MenuBuilder) {
      MenuBuilder menuBuilder = (MenuBuilder) popup.getMenu();
      //noinspection RestrictedApi
      menuBuilder.setOptionalIconsVisible(true);
      //noinspection RestrictedApi
      for (MenuItem item : menuBuilder.getVisibleItems()) {
        int iconMarginPx =
            (int)
                TypedValue.applyDimension(
                    TypedValue.COMPLEX_UNIT_DIP, ICON_MARGIN, getResources().getDisplayMetrics());

        if (item.getIcon() != null) {
          if (VERSION.SDK_INT > VERSION_CODES.LOLLIPOP) {
            item.setIcon(new InsetDrawable(item.getIcon(), iconMarginPx, 0, iconMarginPx, 0));
          } else {
            item.setIcon(
                new InsetDrawable(item.getIcon(), iconMarginPx, 0, iconMarginPx, 0) {
                  @Override
                  public int getIntrinsicWidth() {
                    return getIntrinsicHeight() + iconMarginPx + iconMarginPx;
                  }
                });
          }
        }
      }
    }
    popup.setOnMenuItemClickListener(
        menuItem -> {
          Snackbar.make(
                  getActivity().findViewById(android.R.id.content),
                  menuItem.getTitle(),
                  Snackbar.LENGTH_LONG)
              .show();
          return true;
        });
    popup.show();
  }

В общем, я пытался в нем разобраться но для меня это сложно, подскажите как упростить данную часть кода.
А лучше вообще показать какой-нибудь пример.

Не знаю есть ли смысл скидывать мой код так как я и не написал толком ничего но на всякий скину

public class Fragment_Menu_list_Tasks_Prapor_1 extends Fragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_menu_list_task_prapor_1, container, false);
    }

    @Override
    public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState)
    {
        ImageButton back = requireView().findViewById(R.id.back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Navigation.findNavController(view)
                        .navigate(R.id.action_fragment_Menu_list_Tasks_Prapor_1_to_fragment_Menu_list_Tasks_Prapor);
            }
        });

        ImageButton quick_menu = requireView().findViewById(R.id.quick_menu);
        quick_menu.setOnClickListener(v -> showMenu(v, R.menu.quick_menu));
    }


}

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP