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));
}
}
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP