Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何实现android自定义弹出菜单?_Android_Material Design_Popupmenu - Fatal编程技术网

如何实现android自定义弹出菜单?

如何实现android自定义弹出菜单?,android,material-design,popupmenu,Android,Material Design,Popupmenu,我想有一个设计的弹出式菜单,其项目可点击类似下图在Android项目。非常感谢您的推荐。非常感谢。 您可以在自定义布局中使用DialogFragment。所以,就像您创建一个片段一样,您也可以创建一个DialogFragment,它将有自己的自定义布局和DialogBox特性。如下- public class CustomDialogMenu extends DialogFragment { //global variables public static Custo

我想有一个设计的弹出式菜单,其项目可点击类似下图在Android项目。非常感谢您的推荐。非常感谢。

您可以在自定义布局中使用
DialogFragment
。所以,就像您创建一个片段一样,您也可以创建一个DialogFragment,它将有自己的自定义布局和DialogBox特性。如下-

public class CustomDialogMenu extends DialogFragment {
    
    //global variables

    public static CustomDialogMenu newInstance() {
        Bundle args = new Bundle();
        CustomDialogMenu customDialogMenu = new CustomDialogMenu();
        customDialogMenu.setArguments(args);
        return customDialogMenu;
    }

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

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ........

}
private void showCustomDialogMenu() {
    FragmentManager fm = getParentFragmentManager();
    CustomDialogMenu customDialogMenu= CustomDialogMenu.newInstance();
    customDialogMenu.setTargetFragment(this, 300);
    customDialogMenu.show(fm, "custom_dialog_menu");
}
您可以像调用任何其他片段一样使用此片段,
custom\u dialog\u menu.xml
将在对话框菜单中提供您想要的自定义视图

您也可以在片段中调用此对话框。代码如下-

public class CustomDialogMenu extends DialogFragment {
    
    //global variables

    public static CustomDialogMenu newInstance() {
        Bundle args = new Bundle();
        CustomDialogMenu customDialogMenu = new CustomDialogMenu();
        customDialogMenu.setArguments(args);
        return customDialogMenu;
    }

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

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ........

}
private void showCustomDialogMenu() {
    FragmentManager fm = getParentFragmentManager();
    CustomDialogMenu customDialogMenu= CustomDialogMenu.newInstance();
    customDialogMenu.setTargetFragment(this, 300);
    customDialogMenu.show(fm, "custom_dialog_menu");
}
有关更多信息,请遵循代码路径


快乐编码

您必须使用
弹出窗口(弹出视图、宽度、高度、可聚焦)

首先:充气选项菜单

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.option_menu, menu)
}
第二个:覆盖选择的选项项:

override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
    R.id.popup_window -> {
        showPopup()
        true
    }   
}
以下是
showPopup()
的逻辑:

private fun showPopup(){
val anchor=requireActivity().findviewbyd(R.id.popup_window)//将菜单选项设置为anchor,以便弹出窗口显示屏幕的右上角
val inflater=requireContext().getSystemService(LAYOUT\u inflater\u SERVICE)作为LayoutFlater//从系统服务获取LayoutFlater
val popupView=充气机.充气(R.layout.popUp\u window\u options,null)//充气弹出窗口上显示的弹出窗口\u options
//创建弹出窗口
val width=LinearLayout.LayoutParams.WRAP\u内容
val高度=LinearLayout.LayoutParams.WRAP_内容
val focusable=true//允许在弹出窗口外轻触,也可以将其关闭
val popupWindow=popupWindow(popupView、宽度、高度、可聚焦)
popupWindow.elevation=10f//给它阴影
PopupWindowCompat.ShowAs下拉列表(popupWindow,锚点,0,0,重心)
PopupWindowCompat.setWindowLayoutType(popupWindow,WindowManager.LayoutParams.FLAG_全屏)
R.layout.popUp\u window\u options
是包含选项的布局。 希望能有帮助。询问任何困惑


在此之后,您将得到如下信息:

谢谢您的提示回答。但是,Doe能够从屏幕右上方显示对话框作为弹出菜单行为吗?因为此实现将与弹出菜单相同。如果您严格查找弹出菜单,则上述实现将为您创建一个对话框,然后遵循代码pa或者,您可以简单地在菜单项上应用一个侦听器来显示上面的对话框,选择是:)谢谢您的代码片段。它正在工作。此外,是否可以在右侧添加边距空间?因此,弹出菜单将不会粘在正确的设备屏幕上。