移动应用的交互中常常会用到单选菜单,单选菜单的实现方式也有很多种,比如『WeChat』中就可以见到多种样式的单选菜单:

上面这两种样式,我没有去了解它的实际代码,单从交互来看,我猜应该是使用了 PopupWindowBottomSheetDialog

除了这两种方式,我们还可以使用更加简单的 Dialog 来实现。

Dialog 来做的话,很容易就想到了『Android 自定义 Dialog 布局』中引入自定义布局的方式,然后使用 RadioButton 或其他控件来做单选。

这种方式当然可以,但我们有更加简单的实现方式:

public static void showMenuDialog(Context context, String[] options) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setItems(options, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            // Do Something...
        }
    }).show();
}

AlertDialog.Builder 提供了 setItems() 方法来创建简单的列表对话框,从传入的字符串数组中获取各选项的名字,同时还需要传入响应事件,使用时我们可以根据数组的索引来绑定对应选项的点击事件。

当然,为了封装复用,我们应该将响应事件的逻辑交由函数的上层调用者来实现,所以可以封装成:

public static void showMenuDialog(Context context, String[] options, DialogInterface.OnClickListener listener) {
    new AlertDialog.Builder(context)
            .setItems(options, listener)
            .show();
}

效果如下:

Menu Dialog