Android仿美团分类下拉菜单实例代码
作者:剩菜剩饭 发布时间:2022-09-04 09:59:02
标签:Android,美团,分类,下拉,菜单
本文实例为大家分享了Android仿美团下拉菜单的实现代码,分类进行选择,供大家参考,具体内容如下
效果图
操作平台
AS2.0
第三方框架:butterknife
build.gradle
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.jakewharton:butterknife:7.0.1'
}
实现代码
1、实现逻辑:主要利用Spinner与BaseAdapter来实现菜单下拉。具体美观效果要靠各个控件的调整,以及必要的分割线添加。
2、核心代码
适配器的item代码:item_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_main_tv"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="16dp"
android:background="#fff"
android:gravity="center_vertical"
android:singleLine="true"
android:text="测试文字"
android:textSize="15dp"
/>
<!--分割线-->
<TextView
android:id="@+id/main_tv_line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:background="#edecec"/>
</LinearLayout>
主页面布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
>
<Spinner
android:id="@+id/main_sp1"
style="@style/style_spinner">
</Spinner>
<!--这个是spinner之间的分割线-->
<ImageView
style="@style/style_mian_verline"/>
<Spinner
android:id="@+id/main_sp2"
style="@style/style_spinner"
></Spinner>
<ImageView
style="@style/style_mian_verline"/>
<Spinner
android:id="@+id/main_sp3"
style="@style/style_spinner"
></Spinner>
</LinearLayout>
<!--设置一条分割线-->
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#dcdcdc"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="我是分类下面的正文内容"/>
</LinearLayout>
</LinearLayout>
style文件
<!--spinner的样式-->
<style name="style_spinner">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">40dp</item>
<item name="android:layout_weight">1</item>
<item name="android:dropDownVerticalOffset">40dp</item>
<item name="android:dropDownWidth">1000dp</item>
</style>
<!--定义spinner之间的线的样式-->
<style name="style_mian_verline">
<item name="android:layout_width">1dp</item>
<item name="android:layout_height">25dp</item>
<item name="android:background">#dcdcdc</item>
<item name="android:layout_gravity">center_vertical</item>
</style>
MainActivity与适配器写在了一起,便于操作
public class MainActivity extends AppCompatActivity {
@Bind(R.id.main_sp1)
Spinner mMainSp1;
@Bind(R.id.main_sp2)
Spinner mMainSp2;
@Bind(R.id.main_sp3)
Spinner mMainSp3;
private List<String> data_list1;
private List<String> data_list2;
private List<String> data_list3;
private BaseAdapter arr_adapter;//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initData();
initAdapter();
setListener();
}
//设置监听事件,将来商家列表的排序都在这里面处理
private void setListener() {
mMainSp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "点击了"+data_list1.get(position), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
mMainSp2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "点击了"+data_list2.get(position), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
mMainSp3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "点击了"+data_list3.get(position), Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
private void initAdapter() {
//适配器
arr_adapter = new MyAdapter(data_list1);
mMainSp1.setAdapter(arr_adapter);
//适配器
arr_adapter = new MyAdapter(data_list2);
mMainSp2.setAdapter(arr_adapter);
//适配器
arr_adapter = new MyAdapter(data_list3);
mMainSp3.setAdapter(arr_adapter);
}
//设置数据来源,这个要在网络获取。由于数据不会太多,不再考虑性能优化问题
private void initData() {
//数据
data_list1 = new ArrayList<>();
data_list1.add("全部分类");
data_list1.add("零食");
data_list1.add("水果");
data_list1.add("洗衣");
data_list1.add("洗车");
data_list1.add("茶饮");
//数据
data_list2 = new ArrayList<>();
data_list2.add("商圈");
data_list2.add("郑州航院");
data_list2.add("华北水利水电大学");
data_list2.add("河南中医大学");
data_list2.add("河南财经大学");
//数据
data_list3 = new ArrayList<>();
data_list3.add("智能排序");
data_list3.add("好评优先");
data_list3.add("离我最近");
data_list3.add("价格最低");
}
//适配器
class MyAdapter extends BaseAdapter {
private LayoutInflater mLayoutInflater;
private List<String> mDataList;
MyAdapter(List<String> dataList) {
this.mDataList = dataList;
mLayoutInflater = LayoutInflater.from(MainActivity.this);
}
@Override
public int getCount() {
return mDataList.size();
}
@Override
public Object getItem(int position) {
return mDataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//数据不太多,没有使用ViewHolder进行处理。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(MainActivity.this, R.layout.item_main, null);
TextView textView = (TextView) convertView.findViewById(R.id.item_main_tv);
textView.setText(mDataList.get(position));
return convertView;
}
}
}


猜你喜欢
- 目录 Dubbo是什么?Dubbo能做什么?介绍Api模块实现producer模块实现consumer模块实现 Dubb
- 简介说明本文用实例介绍stream的使用。JDK8新增了Stream(流操作) 处理集合的数据,可执行查找、过滤和映射数据等操作。使用Str
- 这些bug可能够你喝一壶的。1、被断言(assert)包含的代码常发生在切换到release版本时,执行结果乖乖的,最终查找结果是asser
- 平时我们编写WinForm程序经常使用VS进行拖控件的方式,这样做虽然简单,但是无法深入了解WinForm程序的本质。其实,用记事本也可以编
- 也许是本人不才,初识Maven时,被各种不明所以的教程搞得一头雾水,而在后来的使用中,我发现Maven大部分功能没有想象的那么困难。本片文章
- Statement 和 PreparedStatement之间的关系和区别. 关系:Prepa
- 这一篇就着重写一下客户端的代码,客户端主要实现的有:启动后检测本地的xml文件,然后发送到服务器获取需要更新的文件以及版本列表。循环下载。下
- 一、ID生成策略1、使用@TableId注解@TableId注解:主键注解使用位置:实体类主键字段。@Data@ToString@Table
- 面试题1:说说什么分布式事务?解释一下什么是CAP?现在互联网开发多使用微服务架构,一个简单的操作,在服务端可能就是由多个服务和数据库实例协
- 废话不多说,上代码public String getRelativeTimeSpanStringForIphone(long time,lo
- 本文实例讲述了C#获取汉字字符串拼音首字母的方法。分享给大家供大家参考。具体如下:这个C#类经常能够用到,将提取汉字的拼音首字母,方便用户查
- 在网上学习了一种继承系统AlertDialog然后用一统一方法控制dialog显示的方法,效果还不错,但按钮栏那里的分隔线并不是想要的。于是
- 前言当初年少懵懂,那年夏天填志愿选专业,父母听其他长辈说选择计算机专业好。从那以后,我的身上就有了计院深深的烙印。从寝室到机房,从机房到图书
- 现假设某个公司采用公用电话来传递数据,数据是四位的整数,在传递过程中是加密的。加密规则是每位数字都加上5,然后再用除以10的余数代替该数字,
- 我们在SpringBoot和MyBatis整合的时候,需要在SpringBoot中通过注解方式配置事务回滚1 Pojo类package co
- 一、原理1、不变模式(不可变对象)在并行软件开发过程中,同步操作似乎是必不可少的。当多线程对同一个对象进行读写操作时,为了保证对象数据的一致
- 一、前言系统执行业务逻辑之前,会对输入数据进行校验,检测数据是否有效合法的。所以我们可能会写大量的if else等判断逻辑,特别是在不同方法
- 1、什么是线程及线程池线程是操作系统进行时序调度的基本单元。线程池可以理解为一个存在线程的池子,就是一个容器,这个容器只能存在线程。这个容器
- where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。1.接口约束。例如,可以声明一个泛型类 MyGeneric
- spring boot 秉承约定优于配置,spring boot在静态资源的处理上就已经默认做了处理。1.默认资源映射映射”/**”的路径到