移动应用的交互中常常会用到单选菜单,单选菜单的实现方式也有很多种,比如『WeChat』中就可以见到多种样式的单选菜单:
![]() |
![]() |
上面这两种样式,我没有去了解它的实际代码,单从交互来看,我猜应该是使用了 PopupWindow
和 BottomSheetDialog
。
除了这两种方式,我们还可以使用更加简单的 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](https://LiarrDev.github.io/post-images/1562417566508.gif)