早晨的时候想实现一个点击按钮弹出快捷菜单的功能,网上好多教程都过于陈旧,麻烦,无奈自己查了官网的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 来实现的,有兴趣的可以自己找一下资料,网上好多详细的资料,就不说了。