Android开发:仿美团下拉列表菜单,帮助类,复用简单
近期在项目中须要用到下拉菜单。公司比較推崇美团的下拉菜单,于是要实现该功能。想着。这个功能应该是一个常常会用到的。于是何不写一个帮助类,仅仅要往这个类里面传入特定的參数,既能够实现下来菜单,并且还能够实现菜单选择的回调。既能够反复使用,有简单便捷
首先,查看界面效果图
界面倒是比較简单,主要列下功能:
- 这个是靠一个帮助类实现的。下次想在自己的项目中实现该功能,一句引用代码,传入特定的參数既能够实现该功能
- 菜单弹出的时候。背景变灰色。菜单收回,背景回复白色
- 自己主动给选定的选项加入背景色,假设下次选择的其它选项,背景色自己主动切换
- 回调菜单的选择项
public class MenuHelper {
private PopupWindow popupWindow;
private ListView listView;
private List<String> data;
private Context mContext;
private View topView;
private ListAdapter adapter;
private int i = 0;
private FrameLayout container; public MenuHelper(Context context, View topView, final OnMenuClick clickListener, List<String> data, FrameLayout containerView) {
mContext = context;
this.topView = topView;
this.data = data; this.container = containerView;
container.getForeground().setAlpha(0);
topView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showMenu();
}
}); initListView(clickListener);
initPopupWindow(); } private void initListView(final OnMenuClick clickListener) {
listView = new ListView(mContext);
listView.setDivider(null);
listView.setDividerHeight(0);
listView.setBackgroundColor(Color.WHITE);
adapter = new ListAdapter(mContext);
listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<? > parent, View view,
int position, long id) {
i = position;
clickListener.onPopupMenuClick(position);
popupWindow.dismiss();
}
});
} private void initPopupWindow() {
popupWindow = new PopupWindow(listView, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true);
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.WHITE)); popupWindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
if (container != null) {
container.getForeground().setAlpha(0);
}
}
});
} public void showMenu() {
adapter.notifyDataSetChanged();
if (popupWindow.isShowing()) {
popupWindow.dismiss();
}else {
popupWindow.setOutsideTouchable(true);
popupWindow.setTouchable(true);
popupWindow.showAsDropDown(topView, 0, 0);
if (container != null) {
container.getForeground().setAlpha(120);
}
}
} private class ListAdapter extends ArrayAdapter<String> { public ListAdapter(Context context) {
super(context, R.layout.item_text, data);
} private Holder getHolder(final View view) {
Holder holder = (Holder) view.getTag();
if (holder == null) {
holder = new Holder(view);
view.setTag(holder);
}
return holder;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
rowView = inflater.inflate(R.layout.item_text, null);
}
final Holder holder = getHolder(rowView); holder.textview.setText(data.get(position));
if (position == i) {
holder.textview.setBackgroundColor(mContext.getResources().getColor(R.color.item_press));
}else {
holder.textview.setBackgroundColor(Color.TRANSPARENT);
} return rowView;
} private class Holder {
public TextView textview; public Holder(View view) {
textview = (TextView) view.findViewById(R.id.textView);
}
}
}
}
public interface OnMenuClick {
public void onPopupMenuClick(int position);
}
最后,是MainActivity的代码:
public class MainActivity extends Activity implements OnMenuClick{
private MenuHelper mMenuHelper;
private Button button;
private FrameLayout container;
private List<String> menuData; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); container = (FrameLayout) findViewById(R.id.container);
button = (Button) findViewById(R.id.button); menuData = new ArrayList<String>();
menuData.add("ladfj");
menuData.add("ladfj");
menuData.add("ladfj");
menuData.add("ladfj");
menuData.add("ladfj"); mMenuHelper = new MenuHelper(this, button, this, menuData, container); button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mMenuHelper.showMenu();
}
}); } @Override
public void onPopupMenuClick(int position) {
Log.d("debug", "click position " + position);
} }
Android开发:仿美团下拉列表菜单,帮助类,复用简单的更多相关文章
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
注:本文转载于:http://blog.csdn.net/minimicall/article/details/39484493 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到 ...
- Android开发 ---xml构建选项菜单、上下文菜单(长按显示菜单)、发通知、发送下载通知
1.activity_main.xml 描述: 定义了一个TextView和三个按钮 <?xml version="1.0" encoding="utf-8&quo ...
- Android开发精彩博文收藏——UI界面类
本文收集整理Android开发中关于UI界面的相关精华博文,共大家参考!本文不定期更新! 1. Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各 ...
- Android开发 ---代码创建选项菜单、隐藏菜单项、菜单的生命周期,菜单按钮图标设置、搜索框、xml中设置子菜单
1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> < ...
- Android--------WebView+H5开发仿美团 预加载,加载失败和重新加载
Android嵌入式开发已经占大多数了,很多界面都是以网页的形式展示,WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. 本博客主要是模仿美团的旅游出行模块的预加载,网页加载失 ...
- 【Android开发】问答机器人,聊天类App的开发制作过程记录
缘起 很久没写项目了,所以单纯的想练练手,正好看到有问答机器人的接口,想到之前也做过聊天项目,为什么不实验一下呢.当然也是简单调用接口的项目,并没有真正的完成问答的算法等等.业余项目,功能不齐全,只实 ...
- Android开发--仿微信语音对讲录音
原文地址:http://www.2cto.com/kf/201502/378704.html 自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录 ...
- android开发之使用上下文菜单
android中的上下文菜单类似于PC上的鼠标右键单击,不同的是android上没有鼠标这一概念,更谈不上右键单击,在android中,一般是长按某个View,调出上下文菜单.与OptionsMenu ...
- android 开发-(Contextual Menu)上下文菜单的实现
在android3.0以后,安卓设备不在提供物理的菜单按键,同时,android应用提供了另外的菜单实现机制,来替代之前的菜单创建方式.安卓设备中,平常可以使用长按住某个内容弹出菜单选项.这就是我们需 ...
随机推荐
- js星星评分插件
下载:https://files.cnblogs.com/files/wordblog/%E6%98%9F%E6%98%9F%E6%8F%92%E4%BB%B6.rar
- Dream------Hbase--0.94版本和0.98/1.X版本api变动
Dream------Hbase--0.94版本和0.98/1.X版本api变动 网上好多说getQualifier.getValue.getRow被..Array代替了,其实并不是的. 1. Int ...
- python代码在IDE下调试设置命令行参数
带命令行参数的代码在IDE下调试,需要把参数赋值,本文mark一下具体的命令行参数在代码中赋值方法. if __name__ == "__main__": sys.argv = [ ...
- Mysql读写分离-Amoeba Proxy
参考:http://www.linuxidc.com/Linux/2015-10/124115.htm 一个完整的MySQL读写分离环境包括以下几个部分: 应用程序client database pr ...
- TypeError: Object of type 'int64' is not JSON serializable
错误类型:TypeError: Object of type 'int64' is not JSON serializable 错误场景:对Numpy和Pandas结果进行json.dumps报错 错 ...
- activiti helloworld 续
todo... 8.开发流程部署功能 9.开发简单任务待办功能 10.开发简单任务办理功能 11.开发页面activiti流程跟踪图形展现功能 12.集成网页流程设计器
- Smooth Face Tracking with OpenCV
先马克下,回头跑试试:http://synaptitude.me/blog/smooth-face-tracking-using-opencv/ GitHub:https://github.com/S ...
- 【oracle】入门学习(一)
一直想学oracle但都没有下定决心.这次借了书,一定要学好oracle. 目前学习 <Oracle从入门到精通> 明日科技 的Oracle 11g 版本 关系型数据库的基本理论 数据模型 ...
- php常用的安全过滤函数
目录结构 ①常用的安全函数有哪些: ②这些函数的作用: ③函数的用法: ④举例说明: ⑤参考资料: 由于越来越多的项目开始使用框架,所以,很多的程序员也不在关心安全的问题!因为框架已经帮我们几乎完美的 ...
- StringUtils一些常用方法
StringUtils是org.apache.commons.lang jar包里面的类方法,当输入参数String为null则不会抛出NullPointerException,而是做了相应处理,nu ...