PopupWindow+RecyclerView实现上下滑动框功能

Android 自定义下拉菜单的实现(基于PopupWindow+RecyclerView) 文章目录一、引言二、效果三、代码实现四、结语 一、引言 安卓自带的Spinner局限性较大,基本不能满足开发样式要求,当前又没有成熟的相关框架,所以决定自己使用PopupWindow实现一个下拉菜单 二、效果 三、代码实现 布局: 新建xml文件:layout_dropdown_menu <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/ap 阅读详情

本文实例为大家分享了PopupWindow+RecyclerView实现上下滑动框功能的具体代码,供大家参考,具体内容如下

1.新建一个适配器继承自RecyclerView.Adapter

package aud.hik.com.audiorecordtool;
 
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
 
import java.util.List;
 
public class FileListAdapter extends RecyclerView.Adapter<FileListAdapter.ViewHolder  {
  private final String TAG = "FileListAdapter";
  private List<String  mFileList = null;
  private OnItemClickListener mOnItemClickListener = null;
  static class ViewHolder extends RecyclerView.ViewHolder{
    TextView fileNameView;
 
    public ViewHolder(View view) {
      super(view);
      fileNameView = (TextView) view.findViewById(R.id.file_name);
    }
  }
 
  public FileListAdapter(List<String  fileList) {
    this.mFileList = fileList;
  }
 
  //加载item 的布局 创建ViewHolder实例
  @Override
  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);//加载view布局文件
    ViewHolder holder = new ViewHolder(view);
    return holder;
  }
 
  //对RecyclerView子项数据进行赋值
  @Override
  public void onBindViewHolder(ViewHolder holder, int position) {
    if(null == holder)
    {
      MyLog.LOGE(TAG,"Holder is null");
      return;
    }
    final String fileName= mFileList.get(position);
    MyLog.LOGI(TAG,"filename = "+fileName +"filenameview = "+holder.fileNameView);
    holder.fileNameView.setText(fileName);
 
    final int tempPosition = position;
 
    if(null != mOnItemClickListener)
    {
      holder.itemView.setOnClickListener( new View.OnClickListener() {
 
        @Override
        public void onClick(View v) {
          mOnItemClickListener.onClickItem(tempPosition,fileName);
        }
      });
 
//      holder.itemView.setOnLongClickListener( new View.OnLongClickListener() {
//        @Override
//        public boolean onLongClick(View v) {
//          mOnItemClickListener.onLongClick(tempPosition,fileName);
//          return false;
//        }
//      });
    }
  }
 
  //返回子项个数
  @Override
  public int getItemCount() {
    return mFileList.size();
  }
 
 
  public interface OnItemClickListener{
    void onClickItem( int position,String fileName);
//    void onLongClickItem( int position,String fileName);
  }
 
 
  public void setOnItemClickListener(OnItemClickListener onItemClickListener ){
    this.mOnItemClickListener = onItemClickListener;
  }
}

2.mainactivity中需要调用的方法

private void showPopupWindow(){
View view = LayoutInflater.from(this).inflate(R.layout.pop_window,null);
//初始化List数据
mVecFile = getFileName(TEXT_READ);
//初始化RecyclerView
RecyclerView recyslerview = (RecyclerView) view.findViewById(R.id.recycler_view);
//创建LinearLayoutManager 对象 这里使用 LinearLayoutManager 是线性布局的意思
LinearLayoutManager layoutmanager = new LinearLayoutManager(this);
//设置RecyclerView 布局
recyslerview.setLayoutManager(layoutmanager);
//设置Adapter
FileListAdapter adapter = new FileListAdapter(mVecFile);
adapter.setOnItemClickListener(new FileListAdapter.OnItemClickListener() {
//      @Override
//      public void onLongClickItem(int position,String fileName) {
//        Toast.makeText(AudioRecordActivity.this,"onLongClick事件    您点击了第:"+position+"个Item",Toast.LENGTH_SHORT).show();
//      }
@Override
public void onClickItem(int position,String fileName) {
mTextName = fileName;
mEdiTxtName.setText(mTextName);
String mTextPath = TEXT_READ+"/"+mTextName;
// File file = new File(path);
Toast.makeText(AudioRecordActivity.this, mTextPath, Toast.LENGTH_SHORT).show();
mList = new ArrayList< ();
try {
FileReader fr = new FileReader(mTextPath);
BufferedReader br = new BufferedReader(fr);//以行的方式读取文件
String str = null;
while(null != (str = br.readLine()))
{
mList.add(str);
MyLog.LOGI(TAG,str);
}
fr.close();
br.close();
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
MyLog.LOGI(TAG,"list size="+mList.size());
if(0 != mList.size())
{
mTextView.setText(mList.get(mListIndex));
}
else
{
return;
}
}
});
recyslerview.setAdapter(adapter);
//解决android7.0以上手机的适配问题
PopupWindow popupWindow = new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT){
@Override
public void showAsDropDown(View anchor) {
if(Build.VERSION.SDK_INT  = 24){
Rect visibleFrame = new Rect();
anchor.getGlobalVisibleRect(visibleFrame);
int height = anchor.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom;
setHeight(height);
}
super.showAsDropDown(anchor);
}
@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);
}
};
ColorDrawable dw = new ColorDrawable(0x10000000);
popupWindow.setBackgroundDrawable(dw);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.showAsDropDown(mEdiTxtName);
}

3.item.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="wrap_content"
android:orientation="horizontal"
android:background="@color/colorPrimaryDark"
android:layout_margin="1dp" 
<TextView
android:id="@+id/file_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorWhite"
android:textSize = "30sp"/ 
</LinearLayout 

4.pop_window.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.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" 
</android.support.v7.widget.RecyclerView 
</LinearLayout 

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

更多Android进阶指南 可以扫码 解锁 《Android十大板块文档》

1.Android车载应用开发系统学习指南(附项目实战)

2.Android Framework学习指南,助力成为系统级开发高手

3.2024最新Android中高级面试题汇总+解析,告别零offer

4.企业级Android音视频开发学习路线+项目实战(附源码)

5.Android Jetpack从入门到精通,构建高质量UI界面

6.Flutter技术解析与实战,跨平台首要之选

7.Kotlin从入门到实战,全方面提升架构基础

8.高级Android插件化与组件化(含实战教程和源码)

9.Android 性能优化实战+360°全方面性能调优

10.Android零基础入门到精通,高手进阶之路

敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔

Android PopupWindow+RecyclerView 实现二级联动筛选 在popupWindow 布局里自定义了 MyScrollView,重写 onMeasure() 方法可以实现自定义测量规则。其中,使用 getMeasuredHeight() 方法和 getMeasuredWidth() 方法可以获取 ScrollView 的测量高度和测量宽度。通过 setMaxHeight 来设置 ScrollView 的最大高度@Override主要是读取本地数据添加到数组,以及popupWindow 的创建 跟点击交互。 阅读详情

相关推荐

基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)

包含RecyclerView绑定、PopupWindow删除功能和SharedPreferences持久化存储。

spiritzore的专栏 865

【Android】多种方式实现截图(屏幕截图、View截图、长图)

获取需要截屏的区域的宽高,创建一个画布,然后区域内的内容绘制在画布上,最后生成bitmap图片。Android 截图主要为四种:View 截图、WebView 截图、屏幕截图、系统截图和 adb 截图。

full courage的博客 1万+

Android实现长截图与长图分享 (附完整源码)

Android实现长截图与长图分享 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 781

安卓顶部标题栏随页面的滑动渐变

ActionBar随ScorllView上下拖动而透明度渐变效果

liwei123liwei123的博客 1042

ResNet理论基础与具体实现(详细教程)

论文地址:Deep Residual Learning for Image Recognition ​ Identity Mappings in Deep Residual Networks pytroch源码地址:resnet 0x00 前言 ResNet是2015年就提出的网络结构,中文名字叫作深度残差网络,主要作用是图像分类。现在在图像分割、目标检测等领域都有很...

coordinate的博客 8336

模拟CMOS 第2章 MOS器件物理基础

模拟CMOS 第2章 MOS器件物理基础 文章目录模拟CMOS 第2章 MOS器件物理基础2.1 基本概念2.1.1 MOSEFT开关2.1.2 MOSEFT结构2.1.3 MOS符号2.2 MOS的I/V特性2.2.1 阈值电压2.2.2 I/V特性的推导2.3 二级效应2.4 MOS器件模型2.4.1 MOS器件版图2.4.2 MOS器件电容2.4.3 MOS小信号模型2.4.4 MOS SPICE模型2.4.5 NMOS与PMOS器件的比较2.4.6 长沟道器件与短沟道器件的比较附录A 用作电容器MO

椰子奶糖的博客 5208

android item弹出popupwindow recycleview_PopupWindow+RecyclerView实现上下滑动框功能

本文实例为大家分享了PopupWindow+RecyclerView实现上下滑动框功能的具体代码,供大家参考,具体内容如下1.新建一个适配器继承自RecyclerView.Adapterpackage aud.hik.com.audiorecordtool;import android.support.v7.widget.RecyclerView;import android.view.Layou...

weixin_39647734的博客 380

基于多智能体协作的量化交易研究框架TradingAgents详解

量化交易系统通过算法模型分析市场数据,旨在实现自动化投资决策。其核心原理在于利用计算机强大的数据处理能力,结合统计学和机器学习方法,从历史数据中挖掘可重复的盈利模式。这一技术的价值在于能够克服人类情绪干扰,实现纪律性交易,并快速处理海量信息。在应用场景上,量化策略广泛应用于股票、期货、外汇等多个金融市场。本文聚焦的TradingAgents框架,创新性地引入了**多智能体协作**和**对抗性验证**机制,通过模拟真实投研团队的分工与辩论流程,构建了一个研究友好、决策过程可解释的量化交易研究平台,为探索大语言

weixin_36019375的博客 435

RecyclerView(三):点击RecyclerView的某一个Item,弹出PopupWindow,然后再点击PopupWindow的item,弹出对话框

View view = getLayoutInflater().inflate(R.layout.fragment_linear_recycler_view,null); View view1 = getLayoutInflater().inflate(R.layout.layout_popupwindow,null); TextView textViewEdit = view1.findView...

KiMiWaWonderful的博客 2529

学习STM32的无人机控制

下面是一个基于STM32的无人机控制的简单示例代码,包括四旋翼的PID控制、遥控器信号解析和电机控制。本示例以STM32F103系列为例,使用Keil C编译器进行开发。

qq_67153941的博客 707

经典损失函数——均方误差(MSE)和交叉熵误差(CEE)的python实现

损失函数(loss function)用来表示当前的神经网络对训练数据不拟合的程度。这个损失函数有很多,但是一般使用均方误差和交叉熵误差等。 1.均方误差(mean squared error) 先来看一下表达式: 用于将的求导结果变成,是神经网络的输出,是训练数据的标签值,k表示数据的维度。 用python实现: def MS...

Answer3664的博客 1万+

PopupWindow + RecyclerView的使用

前段时间的项目中,遇到了一个对于当时的我来说,是一个比较麻烦的事,就是在使用PopupWindow做顶部的弹出菜单的时候,我用了GridView来添加itemView,结果发现在点击的时候,会出现itemView的父布局也会出现点击现象,没达到项目要求,然后就使用了RecyclerView来做这个功能。下面贴部分代码:import android.content.Context; import a

Vir_czz的博客 7027

【ISAR成像】基于Matlab的飞机点目标模型仿真与图像优化

本文详细介绍了如何使用Matlab进行ISAR成像仿真,重点讲解了从构建飞机点目标模型到生成清晰图像的完整流程。通过模拟雷达回波、距离压缩、运动补偿及方位压缩等核心信号处理步骤,并结合相位梯度自聚焦等优化技巧,有效提升了ISAR图像的清晰度与分辨率。文章还分享了雷达参数调优、加窗处理等实战经验,为雷达信号处理与目标识别研究提供了实用指导。

weixin_29071809的博客 390

RecyclerView+PopupWindow 自定义弹框

好久没写博客了,从7月份一直实习到现在,趁着过年有时间,整理一下今年学到的东西,弹框是我们一直需要的控件之一,所以弄一个好的弹框显示是蛮有必要的,这是我在我的项目里自己封装的一个弹框控件。 我们采用RecyclerView + PopupWindow要封装我们的弹框控件的样式,RecyclerView很强大,是谷歌新出的控件将会取代ListView,如果你还不会使用,应该去学习如何使用它,并

TIANLANG3的博客 9141

接入 AI 之后,为什么测试和排障还是没有真正变快?

如果你们准备做平台型 AI,不要先从聊天入口开始想。先把真实数据采上来;再把链路、版本、快照、报告这些核心对象建稳;再把历史沉淀、反馈、检索能力补齐;最后再让 AI 围绕这些对象去工作。这样做出来的 AI,才更容易从“看起来聪明”走向“真正省时间”。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 527

SAP-ABAP:SAP HANA性能神器FDA:是极速查询的引擎,也是CPU过载的元凶

在SAP S/4HANA的世界里,有一个被ABAP开发者们既爱又怕的特性——Fast Data Access(FDA),它能将性能提升百倍,也能让CPU瞬间飙升。本文将带您全面解剖这一核心机制。

baidu_35680696的博客 849

【安卓学习之UI学习】PopupWindow实现筛选框

█ 【安卓学习之UI学习】Dialog的使用总结 █ 相关文章: -   ● 【android学习开源项目之BasePopup】BasePopup(PopupWindow)进行二次封装  ● 【android学习开源项目之AndroidAutoSize】AndroidAutoSize和DialogFragment的适配  ● 【安卓学习之UI学习】 自定义组合控件View 的开发  ● 【安卓学习之UI学习】 自定义 弧形等级进度条  ● 【安卓学习之UI学习】RecyclerView的使用总

任我飞的博客 760

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android item弹出popupwindow recycleview_PopupWindow的简单使用(结合RecyclerView)

Android弹窗:在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利。关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindow;两者的区别:AlertDialog弹窗在位置显示上是固定的,而PopupWindow则相对比较随意,能够在主屏幕上的任意位置显示;今天就简单介绍一下,如何利用PopupWindow实现Recycle...

weixin_39610956的博客 1147

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Android】RecyclerView中点击Item弹出PopupWindow

文章目录前言写法1:mcontext写法2:parent.getContext() 前言 效果: 【核心问题在于PopupWindow上下文环境不知道怎么写?】 onClick()中的final View root = LayoutInflater.from(mcontext).inflate(R.layout.popupwindow_layout, null, false); 的from()...

sandalphon4869的博客 4904

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android item弹出popupwindow recycleview_recyclerview点击item弹出popupwindow

recyclerview+popupwindow:先看activity:package com.fanyafeng.orlitedemo.recycleview.activity;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.des...

weixin_39965075的博客 790

recyclerview点击item弹出popupwindow

recyclerview+popupwindow: 先看activity: package com.fanyafeng.orlitedemo.recycleview.activity; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.supp

专栏 1万+

PopupWindow的简单使用(结合RecyclerView)

Android弹窗: 在Android中弹出式菜单(以下称弹窗)是使用十分广泛一种菜单呈现的方式,弹窗为用户交互提供了便利。关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindow;两者的区别:AlertDialog弹窗在位置显示上是固定的,而PopupWindow则相对比较随意,能够在主屏幕上的任意位置显示; 今天就简单介绍一下,如何利用PopupWindow实现Recyc

shu_lance的博客 1万+

textview+popupwindow实现下拉框功能

效果图: 1、首先对TextView监听 2、监听事件中使popupwindow显示在textview下方 3、设置popupwindow,内容布局可以使用recyclerview或者listview,看个人爱好 1、首先需要使textview可点击,设置监听。 //tv_online_count_land 为textview的变量名 tv_online_count_land = findViewById(R.id.tv_online_count_land); tv_online_count_land

liu66的博客 571
上一篇: Android显示GIF图片实例代码
下一篇: 面试经验分享:助力1-3年Android开发工程师顺利通关
不秃头de程序猿
博客等级 码龄5年 4090粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值