热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android实现简单下拉筛选框

这篇文章主要为大家详细介绍了一款简单灵活的Android下拉筛选框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近接到一个新的项目,项目时间比较紧张,有一个功能类似于58同城,京东的一个下拉筛选框,为了节省时间,从网上面拷贝了一份封装好的代码,进行的自己的一些修改,感觉灵活性还挺高的,分享出来给大家看一看

大致效果如下,可以自己加入自己的布局

先看一下这个ExpandTabView这个类  代码比较简单 我就不做具体介绍了 有不懂的可以私信我

public class ExpandTabView extends LinearLayout implements OnDismissListener {
 
 private ToggleButton selectedButton;
 private ArrayList mTextArray = new ArrayList();
 private ArrayList mViewArray = new ArrayList();
 private ArrayList mToggleButton = new ArrayList();
 private Context mContext;
 private final int SMALL = 0;
 private int displayWidth;
 private int displayHeight;
 private PopupWindow popupWindow;
 private int selectPosition;
 
 public ExpandTabView(Context context) {
 super(context);
 init(context);
 }
 
 public ExpandTabView(Context context, AttributeSet attrs) {
 super(context, attrs);
 init(context);
 }
 
 /**
 * 根据选择的位置设置tabitem显示的值
 */
 public void setTitle(String valueText, int position) {
 if (position  textArray, ArrayList viewArray) {
 if (mCOntext== null) {
 return;
 }
 LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
 mTextArray = textArray;
 for (int i = 0; i 

这个代码基本就是对popupwindow进行了封装,通过对ToggleButton按钮的监听来实现popupwindow的弹出和收回。

外部设置的话,也特别简单,只需要将自己定义好的布局传入到list集合中就可以。

下面是MainActivity中的代码

public class MainActivity extends AppCompatActivity {
 
 
 private ExpandTabView expandTabView;
 private ArrayList mViewArray = new ArrayList();
 private ViewLeft viewLeft;
 private ViewMiddle viewMiddle;
 private ViewRight viewRight;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initView();
  initVaule();
  initListener();
 
 }
 
 private void initView() {
 
  expandTabView = (ExpandTabView) findViewById(R.id.expandtab_view);
  viewLeft = new ViewLeft(this);
  viewMiddle = new ViewMiddle(this);
  viewRight = new ViewRight(this);
 
 }
 
 private void initVaule() {
  mViewArray.add(viewMiddle);
 mViewArray.add(viewLeft);
 mViewArray.add(viewRight);
  ArrayList mTextArray = new ArrayList();
  mTextArray.add("区域");
 mTextArray.add("距离");
 mTextArray.add("距离");
 
  expandTabView.setValue(mTextArray, mViewArray);
// expandTabView.setTitle(viewLeft.getShowText(), 0);
// expandTabView.setTitle(viewMiddle.getShowText(), 1);
// expandTabView.setTitle(viewRight.getShowText(), 2);
 
 }
 
 private void initListener() {
 
  viewLeft.setOnSelectListener(new ViewLeft.OnSelectListener() {
 
   @Override
   public void getValue(String distance, String showText) {
    onRefresh(viewLeft, showText);
   }
  });
 
  viewMiddle.setOnSelectListener(new ViewMiddle.OnSelectListener() {
 
   @Override
   public void getValue(String showText) {
 
    onRefresh(viewMiddle,showText);
 
   }
  });
 
  viewRight.setOnSelectListener(new ViewRight.OnSelectListener() {
 
   @Override
   public void getValue(String distance, String showText) {
    onRefresh(viewRight, showText);
   }
  });
 
 }
 
 private void onRefresh(View view, String showText) {
 
  expandTabView.onPressBack();
  int position = getPositon(view);
  if (position >= 0 && !expandTabView.getTitle(position).equals(showText)) {
   expandTabView.setTitle(showText, position);
  }
//  Toast.makeText(MainActivity.this, showText, Toast.LENGTH_SHORT).show();
 
 }
 
 private int getPositon(View tView) {
  for (int i = 0; i 

以上就是这个筛选菜单栏的大致用法,个人感觉还是比较简单的,也比较灵活,修改起来也比较方便。

但是在项目中使用的时候碰到了一个问题,就是popupwindow在7.0的手机上弹出位置异常的问题,,查了一下,是因为手机状态栏高度的问题

于是重写了一下popupwindow的showAsDropDown方法就解决了,下面是具体代码

@Override
 public void showAsDropDown(View anchor, int xoff, int yoff) {
  if(Build.VERSION.SDK_INT >= 24) {
   Rect rect = new Rect();
   anchor.getGlobalVisibleRect(rect);
   int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;
   setHeight(h);
  }
  super.showAsDropDown(anchor, xoff, yoff);
 }

通过对SDK版本来进行判断,大于24的话就执行这个方法,解决了popupwindow在7.0手机上异常弹出的问题。

最后附上Demo地址 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  •     这里使用自己编译的hadoop-2.7.0版本部署在windows上,记得几年前,部署hadoop需要借助于cygwin,还需要开启ssh服务,最近发现,原来不需要借助cy ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • linux 禁止指定ip访问
    linux中如何禁止指定的ip访问呢?比如被别人暴力破解,被别人使用不同的密码尝试登录:所以我想直接禁用这些ip的访问.怎么办呢?解决方案:修改配置文件etchosts.deny把 ... [详细]
  • 一、修改注册表去掉桌面图标小箭头1按下win+R组合快捷键,打开windows10系统的“运行”窗口,输入“regedit”,打开注册表编辑器,找到HKEY_CLASSES_ROOT\lnkfi ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
王延霞之歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有