筛选菜单

来源:互联网 发布:韩国进出口贸易数据 编辑:程序博客网 时间:2024/06/05 06:39

有时候,会遇到筛选菜单的需求,github上有一篇star比较多的,传送门:https://github.com/dongjunkun/DropDownMenu,下载了下来玩了玩,感觉蛮不错的~ 具体的不多说了 ,自己去看吧!

xml中使用:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:orientation="vertical"    tools:context=".activity.MainActivity">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="详情页"        android:padding="10dp"        android:textColor="@android:color/white"        android:background="#cccccc"        android:gravity="center_horizontal"/>    <com.yyydjk.library.DropDownMenu        android:id="@+id/dropDownMenu"        android:layout_width="match_parent"        android:layout_height="match_parent"        app:ddmenuTextSize="14sp"        app:ddtextUnselectedColor="@color/drop_down_unselected"        app:ddtextSelectedColor="@color/drop_down_selected"        app:ddmenuSelectedIcon="@drawable/drop_down_selected_icon"        app:ddmenuUnselectedIcon="@drawable/drop_down_unselected_icon"/></LinearLayout>

代码实现:

package com.example.lenovo.demo.activity;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.AdapterView;import android.widget.LinearLayout;import android.widget.ListView;import com.example.lenovo.demo.R;import com.example.lenovo.demo.adapter.GirdDropDownAdapter;import com.example.lenovo.demo.adapter.ListDropDownAdapter;import com.yyydjk.library.DropDownMenu;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MainActivity extends Activity {    private DropDownMenu mDropDownMenu;    private List<View> popupViews;    private ListView cityView;//城市列表    private ListView ageView;//年龄列表    private GirdDropDownAdapter cityAdapter;//城市数据适配器    private ListDropDownAdapter ageAdapter;//年龄数据适配器    private String citys[] = {"不限", "武汉", "北京", "上海", "成都", "广州", "深圳", "重庆", "天津", "西安", "南京", "杭州"};    private String ages[] = {"不限", "18岁以下", "18-22岁", "23-26岁", "27-35岁", "35岁以上"};    private String headers[] = {"城市","年龄"};    private LinearLayout contentView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mDropDownMenu = (DropDownMenu) findViewById(R.id.dropDownMenu);        initView();        popupViews.add(cityView);        popupViews.add(ageView);        cityAdapter = new GirdDropDownAdapter(this, Arrays.asList(citys));        ageAdapter = new ListDropDownAdapter(this, Arrays.asList(ages));        cityView.setAdapter(cityAdapter);        ageView.setAdapter(ageAdapter);        mDropDownMenu.setDropDownMenu(Arrays.asList(headers), popupViews, contentView);        cityView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                cityAdapter.setCheckItem(position);                mDropDownMenu.setTabText(position == 0 ? headers[0] : citys[position]);                mDropDownMenu.closeMenu();            }        });        ageView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                ageAdapter.setCheckItem(position);                mDropDownMenu.setTabText(position == 0 ? headers[1] : ages[position]);                mDropDownMenu.closeMenu();            }        });    }    private void initView() {        //初始化城市列表数据        popupViews = new ArrayList<>();        cityView = new ListView(this);        cityView.setDividerHeight(1);//设置分割线高度 单位px        //初始化年龄列表数据        ageView = new ListView(this);        ageView.setDividerHeight(1);        contentView = (LinearLayout) LayoutInflater.from(MainActivity.this).inflate(R.layout.contentview,null);    }    @Override    public void onBackPressed() {        //按返回键先关闭菜单,再退出Activity        if (mDropDownMenu.isShowing()) {            mDropDownMenu.closeMenu();        }else {            super.onBackPressed();        }    }}

————————————————————————————————————————————————————————————————
2个数据适配器;

package com.example.lenovo.demo.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.lenovo.demo.R;import java.util.List;/** * Created by lenovo on 2016/9/12. **/public class GirdDropDownAdapter extends BaseAdapter {    private Context context;    private List<String> list;    private int checkItemPosition = 0;    public void setCheckItem(int position) {        checkItemPosition = position;        notifyDataSetChanged();    }    public GirdDropDownAdapter(Context context, List<String> list) {        this.context = context;        this.list = list;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if (convertView != null) {            viewHolder = (ViewHolder) convertView.getTag();        } else {            convertView = LayoutInflater.from(context).inflate(R.layout.item_list_drop_down, null);            viewHolder = new ViewHolder();            viewHolder.mText = (TextView) convertView.findViewById(R.id.text);            convertView.setTag(viewHolder);        }        fillValue(position, viewHolder);        return convertView;    }    private void fillValue(int position, ViewHolder viewHolder) {        viewHolder.mText.setText(list.get(position));        if (checkItemPosition != -1) {            if (checkItemPosition == position) {                viewHolder.mText.setTextColor(context.getResources().getColor(R.color.drop_down_selected));                viewHolder.mText.setCompoundDrawablesWithIntrinsicBounds(null, null, context.getResources().getDrawable(R.drawable.drop_down_checked), null);            } else {                viewHolder.mText.setTextColor(context.getResources().getColor(R.color.drop_down_unselected));                viewHolder.mText.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);            }        }    }    public class ViewHolder {        private TextView mText;    }}
package com.example.lenovo.demo.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.lenovo.demo.R;import java.util.List;public class ListDropDownAdapter extends BaseAdapter {    private Context context;    private List<String> list;    private int checkItemPosition = 0;    public void setCheckItem(int position) {        checkItemPosition = position;        notifyDataSetChanged();    }    public ListDropDownAdapter(Context context, List<String> list) {        this.context = context;        this.list = list;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if (convertView != null) {            viewHolder = (ViewHolder) convertView.getTag();        } else {            convertView = LayoutInflater.from(context).inflate(R.layout.item_default_drop_down, null);            viewHolder = new ViewHolder();            viewHolder.mText = (TextView) convertView.findViewById(R.id.text);            convertView.setTag(viewHolder);        }        fillValue(position, viewHolder);        return convertView;    }    private void fillValue(int position, ViewHolder viewHolder) {        viewHolder.mText.setText(list.get(position));        if (checkItemPosition != -1) {            if (checkItemPosition == position) {                viewHolder.mText.setTextColor(context.getResources().getColor(R.color.drop_down_selected));                viewHolder.mText.setBackgroundResource(R.color.check_bg);            } else {                viewHolder.mText.setTextColor(context.getResources().getColor(R.color.drop_down_unselected));                viewHolder.mText.setBackgroundResource(R.color.white);            }        }    }    public class ViewHolder {        private TextView mText;    }}

————————————————————————————————————————————————————————————————
2个item布局都一样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:background="@color/white"              android:orientation="vertical">    <TextView        android:id="@+id/text"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dp"        android:paddingLeft="25dp"        android:paddingRight="25dp"        android:paddingTop="10dp" /></LinearLayout>
0 0