【Android】巧用DialogFragment制作按钮弹出快捷菜单

早晨的时候想实现一个点击按钮弹出快捷菜单的功能,网上好多教程都过于陈旧,麻烦,无奈自己查了官网的API,找到了这个。下面来介绍官方的这种制作方法~~


首先科普一下,快捷菜单。好多人搞不清楚快捷菜单,选项菜单。

快捷菜单是指在屏幕上长按一段时间弹出的菜单项。一般在屏幕中间弹出

选项菜单是指在手机上的menu键按下所弹出的菜单项。一般从屏幕底部弹出


现在网上的方法一般是:

    构造一个基本的Dialog然后嵌套listView+适配器。这也是很多自定义控件的常用作法。

在查阅官网API的时候无意中发现了API11版本多了一个DialogFragment,可以直接用它来做出各种各样的Dialog,比较方便。下面说一下具体实现:

首先发现官网给的样式中Add a list 就是我们想要的这种类型的,看一下他的示例。

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(R.string.pick_color);
           .setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int which) {
               // The 'which' argument contains the index position
               // of the selected item
           }
    });
    return builder.create();
}
看到一个方法
setItems();//这个方法特别查了一下,有两种重载,我们要的是下面这种
public AlertDialog.Builder setItems (CharSequence[] items, DialogInterface.OnClickListener listener)


第二个很容易知道了,一个监听器,监听单击事件的。

第一个大致也感觉是字符串一类的,只是CharSequence好像从来没用过的样子,他和String的区别是什么呢?接着又查了一下


原来是一个接口,表示有序字符集合。

这个接口包含的方法有:charAt(int index),toString(),length(),subSequence(int start,int end).

越来越蒙圈,后来发现原来就把它当成一个只读String就好了。

下面是实例:

首先是一个shareDialog类

public static class shareDialog extends DialogFragment{
		@Override
		public Dialog onCreateDialog(Bundle savedInstanceState) {
			AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
			builder.setTitle("分享至:");
			builder.setItems(R.array.share, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					Toast.makeText(getActivity(), getResources().getStringArray(R.array.share)[which], 1000).show();
				}
				});
			return builder.create();
		}
	}

然后在按钮的监听器里加入如下代码

DialogFragment newFragment = new shareDialog();
newFragment.show(getFragmentManager(), "huhu");
即可看到想要的效果啦~~

最后是效果图




PS:上面的仿微博的标题栏也是可以点击的,那个是用PopUpWindow 来实现的,有兴趣的可以自己找一下资料,网上好多详细的资料,就不说了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值