项目下载


项目在GitHub上的地址:

https://github.com/Hebin320/DropDownMenu

项目在CSDN上的下载地址:

http://download.csdn.net/detail/hebin320320/9716576


项目预览图


DropDownMenu介绍与使用


这个项目是对开源项目DropDownMenu的在实际项目中的应用。在这个项目中,实现了用自定义view和fragment两种方式完成了对DropDownMenu的使用,一个view独立成一个类,通过接口的方式供Activity调用,同时解决了复用自定义view的问题。通过这个项目,可以能够很清楚地搭建一个下拉筛选框,不仅能供多个Activity使用同一个view,而且还大大减少了Activity中的代码量。

DropDownMenu在github上的地址:

https://github.com/fg2q1q3q/DropDownMenu

项目使用

Gradle


在project 中build.gradle下增加:

  allprojects {repositories {...maven { url "https://jitpack.io" }}}

在app module中增加:

  dependencies {compile 'com.github.fg2q1q3q:DropDownMenu:1.1.1'}

layout


<com.zxl.library.DropDownMenuandroid:id="@+id/dropDownMenu"android:layout_width="match_parent"android:layout_height="match_parent"app:ddmenuTextSize="13sp" //tab字体大小app:ddtextUnselectedColor="@color/drop_down_unselected" //tab未选中颜色app:ddtextSelectedColor="@color/drop_down_selected" //tab选中颜色app:ddmenuSelectedIcon="@mipmap/drop_down_selected_icon" //tab选中状态图标app:ddmenuUnselectedIcon="@mipmap/drop_down_unselected_icon"//tab未选中状态图标app:ddmaskColor="@color/mask_color"     //遮罩颜色,一般是半透明app:ddmenuBackgroundColor="@color/white" //tab 背景颜色app:ddmenuMaxHeight="280dp"//筛选菜单最大高度,默认为wrapapp:ddneedSetSlectedColor="true"//设置选中option后tab是否改变颜色.../>

注意:DropDownMenu高度必须是match_parent,否则动画效果会出现问题

Activity中,除了下拉筛选框之外,还有它的主体内容,一般情况下是个列表;这里需要说明的是,主体内容的控件不是写在DropDownMenu的下方,而是通过view的形式,设置给DropDownMenu。

所以,新建一个xml,名字为activity_main_view,里面就放了个TextView,用来显示筛选框选中的文字,代码如下:

<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"android:layout_gravity="center"><TextView
        android:id="@+id/tv_text"android:layout_width="match_parent"android:layout_height="match_parent"android:text="哈哈哈哈哈哈哈哈哈哈"android:gravity="center"/></LinearLayout>

从预览图可以看出,筛选框里面有四个界面,前两个界面是用实例化xml的方式来实现界面内容的自定义,后两个界面用Fragment的方式实现的;前两个界面的实现方式是一样的,后两个界面实现了给Fragment传参从而显示不同的内容。

第一个界面的xml,layout_first,界面只有两个按钮,实现点击改变Activity中文本框的文本;代码如下:

<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="horizontal"android:layout_gravity="center"><TextViewandroid:id="@+id/btn_one"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:background="@color/colorPrimary"android:gravity="center"android:padding="8dp"android:text="第一个"android:textColor="@color/white"android:textSize="16sp" /><TextViewandroid:id="@+id/btn_two"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:background="@drawable/ok_bg"android:gravity="center"android:padding="8dp"android:text="第二个"android:textColor="@color/white"android:textSize="16sp" /></LinearLayout>

新建一个类,名字叫做FirstView.class,实例化xml,并对相应的控件做相应的操作,代码如下:

class FirstView {private Context context;private MyItemClickListener listener;FirstView(Context context) {this.context = context;}/***  供Activity调用的方法 ,将选择的值传给Activity* */void setListener(MyItemClickListener listener) {this.listener = listener;}View firstView() {View view = LayoutInflater.from(context).inflate(R.layout.layout_first, null);TextView tvBtnOne = (TextView) view.findViewById(R.id.btn_one);TextView tvBtnTwo = (TextView) view.findViewById(R.id.btn_two);tvBtnOne.setOnClickListener(new mClick("第一个"));tvBtnTwo.setOnClickListener(new mClick("第二个"));return view;}private class mClick implements View.OnClickListener {String string;private mClick(String string) {this.string = string;}@Overridepublic void onClick(View v) {listener.onItemClick(v, 1, string);}}}

然后,新建一个Fragment,ThirdView.class,xml中是三个文本框,Fragment的代码如下:

public class ThirdView extends Fragment {@InjectView(R.id.tv_01)TextView tv01;@InjectView(R.id.tv_02)TextView tv02;@InjectView(R.id.tv_03)TextView tv03;MyItemClickListener listener;public void setListener(MyItemClickListener listener) {this.listener = listener;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_third_view, container, false);ButterKnife.inject(this, view);return view;}@Overridepublic void onDestroyView() {super.onDestroyView();ButterKnife.reset(this);}/*** 通过这个方法,可以实现Fragment的复用* */public void setDifferentUse(String tag){switch (tag){case "four":tv01.setText("复用界面的第一个文本");tv02.setText("复用界面的第二个文本");tv03.setText("复用界面的第三个文本");break;default:break;}}@OnClick({R.id.tv_01, R.id.tv_02, R.id.tv_03})public void onClick(View view) {switch (view.getId()) {case R.id.tv_01:listener.onItemClick(view,3,"tvOne");break;case R.id.tv_02:listener.onItemClick(view,3,"tvTwo");break;case R.id.tv_03:listener.onItemClick(view,3,"tvThree");break;}}
}

然后在xml中引用Fragment,新建xml,名字为layout_third.xml,代码如下:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/fg_third"android:layout_width="match_parent"android:layout_height="match_parent"android:name="com.hebin.dropdownmenu.ThirdView"tools:layout="@layout/fragment_third_view" />

最后在Activity中,new 各个界面,然后设置给DropDownMenu,即可实现效果,代码如下:

public class MainActivity extends AppCompatActivity implements MyItemClickListener {@InjectView(R.id.dropDownMenu)DropDownMenu mDropDownMenu;private String headers[] = {"界面一", "界面二","界面三","界面四"};private List<View> popupViews = new ArrayList<>();private TextView tvText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.inject(this);initView();}private void initView() {/*** 第一个界面* */FirstView firstView = new FirstView(MainActivity.this);firstView.setListener(this);popupViews.add(firstView.firstView());/*** 第二个界面* */SecView secView = new SecView(MainActivity.this);secView.setListener(this);popupViews.add(secView.secView());/*** 第三个界面* */View thirdView = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_third, null);ThirdView fragment = (ThirdView) getSupportFragmentManager().findFragmentById(R.id.fg_third);fragment.setListener(this);fragment.setDifferentUse("third");popupViews.add(thirdView);/*** 第四个界面* */View fourView = LayoutInflater.from(MainActivity.this).inflate(R.layout.layout_four, null);ThirdView fragment_01 = (ThirdView) getSupportFragmentManager().findFragmentById(R.id.fg_four);fragment_01.setListener(this);fragment_01.setDifferentUse("four");popupViews.add(fourView);/*** Dropdownmenu下面的主体部分* */View fifthView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main_view, null);tvText = (TextView) fifthView.findViewById(R.id.tv_text);mDropDownMenu.setDropDownMenu(Arrays.asList(headers), popupViews, fifthView);}@Overridepublic void onBackPressed() {//退出activity前关闭菜单if (mDropDownMenu.isShowing()) {mDropDownMenu.closeMenu();} else {super.onBackPressed();}}/*** 每个界面中的控件的点击事件,点击将界面中的参数传给activity中调用* */@Overridepublic void onItemClick(View view, int postion, String string) {switch (postion){case 1:mDropDownMenu.setTabText(string);mDropDownMenu.closeMenu();tvText.setText(string);break;case 2:mDropDownMenu.setTabText(string);mDropDownMenu.closeMenu();tvText.setText(string);break;case 3:mDropDownMenu.setTabText(string);mDropDownMenu.closeMenu();tvText.setText(string);break;default:break;}}
}

注意:第四个界面用的也是第三个界面的Fragment,但是不能用layout_third.xml这个布局,也不能用同一个id,所以新建一个layout_four.xml,里面内容跟layout_third.xml的一样,只不过换了个ID

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hebin320320/article/details/53764991
												

Android下拉筛选DropDownMenu相关推荐

  1. 仿美团、爱奇艺电影票下拉筛选框

    仿美团.爱奇艺电影票下拉筛选框 转自github https://github.com/dongjunkun/DropDownMenu 权当笔记记录,感谢作者分享 作者简书地址 简书 效果图 主要代码 ...

  2. 仿基金查询输入框下拉筛选值效果(JavaScript)

    http://www.weste.net/2007/11-24/19463143437.html 仿基金查询输入框下拉筛选值效果(JavaScript)

  3. Android下拉刷新开源库对比(转)

    安卓下拉刷新开源库对比 作者:desmond1121 目前仅比对github上star数>1500的下拉刷新开源库,在比较完成之后可能会加入其它有代表性的库. Repo Repo Owner S ...

  4. android下拉刷新和上拉加载的一个简单库

    介绍一个android下拉刷新.上拉加载的库: https://github.com/chrisbanes/Android-PullToRefresh 使用方式,创建好一个Android项目,导入li ...

  5. android下拉会谈效果,Android实现下拉展示条目效果

    本文实例为大家分享了Android下拉展示条目的具体代码,供大家参考,具体内容如下 布局文件 xmlns:tools="http://www.easck.com/tools" an ...

  6. Android 下拉刷新上拉载入 多种应用场景 超级大放送(上)

    转载请标明原文地址:http://blog.csdn.net/yalinfendou/article/details/47707017 关于Android下拉刷新上拉载入,网上的Demo太多太多了,这 ...

  7. Android下拉刷新和上拉加载更多

    Android下拉刷新和上拉加载更多 下拉刷新 通过android系统提供的组件:SwipeRefreshLayout 一.基本使用 1 xml中 添加 SwipeRefreshLayout 组件 该 ...

  8. Android下拉刷新的实现(一) - SwipeRefreshLayout篇

    Android下拉刷新的实现(一) - SwipeRefreshLayout篇

  9. Android下拉刷新

    早期下拉刷新主要是用XListView,这个类是继承ListView的,使用起来有局限性,并且在git上作者已经不维护了,之后有人自己写了一个PullToRefreshLayout,不用再继承自Lis ...

最新文章

  1. Integer vs int
  2. 新学期使用ssm开发一个教材管理系统
  3. 二级域名怎么设置_怎么建设自己的网站?看完这四个步骤你就明白了
  4. linux登录ssh怎么保存采集的脚本,ssh自动登录并且su的脚本
  5. 【转】gif文件格式详解
  6. 湿度传感器如何工作?
  7. SpringMVC 学习系列 (4) 之 数据绑定 -1
  8. 【Tomcat】Tomcat性能分析
  9. 轻松完成Birt报告
  10. Android Studio导入project和module的方法
  11. android 方法统计,Android 利用编译时 注入 统计App内所有方法执行时常,分析ANR
  12. 谣言易碎:诺基亚为何不能投靠Android阵营?
  13. 美图秀秀计算机教程,美图秀秀怎么抠图 美图秀秀抠图详细教程
  14. 计算机系统在线帮助,FoxPro应用系统中在线帮助及出错处理方法
  15. 【Proteus仿真】波形信号发生器(4种波形可选,频率可调)
  16. APP在推广之渠道为王(一 )
  17. BZOJ2109: [Noi2010]Plane 航空管制 解题报告
  18. Calculate Tangent Space是怎么计算切线的
  19. U9二次开发之BP定时任务插件开发
  20. MEM/MBA数学强化(03)整式与分式的运算

热门文章

  1. TTS实现文字语音朗读
  2. 【考研英语语法】并列连词详解
  3. 软考和PMP哪个更好考?
  4. win10 如何扫描,win10 如何打印,win10找到设备和打印机,
  5. 国产服务器(麒麟操作系统),springboot应用并发访问redis数据错乱解决方案
  6. python环境搭建.
  7. 【深科信动态】科技创新与产业发展政策研究院揭牌成立!
  8. 地狱模式的居转户记录05
  9. 我在工作中是如何使用【Linux】的
  10. 金明的预算budget题解