创建一个popwindow 并动态设置pop的高度 限定pop高度

2023-11-16

创建一个popwindow 并动态设置pop的高度 限定pop高度

这里举个例子,pop里面放的是一个listview

直接上代码

SelectMedicalCasePopwindow。java

public class SelectMedicalCasePopwindow extends PopupWindow implements OnClickListener, AdapterView.OnItemClickListener {

   private TextView tv;
   private View mMenuView;
   private Context context;
   private Handler callback;

   private ListView mMyListView;
   private String[] items;
   private Button mButton;
   private ChatHistoryAdapter mAdapter;

   public SelectMedicalCasePopwindow(Activity con, List<String> itemList) {
      this(con, itemList.toArray(new String[itemList.size()]));
   }

   public SelectMedicalCasePopwindow(Activity con, String[] items) {
      super(con);
      this.context = con;
      this.items = items;
      int scrheight = DensityUtil.getScreenHeight(context)  / 2;
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      mMenuView = inflater.inflate(R.layout.select_medical_case_pop, null);
      mAdapter = new ChatHistoryAdapter();
      mMyListView = (ListView) mMenuView.findViewById(R.id.bithday_layout);

      View listItem = mAdapter.getView(0, null, mMyListView);
      listItem.measure(0, 0);
      int relheight = listItem.getMeasuredHeight();
      UtilsLog.d(scrheight);
      UtilsLog.d(relheight);


      this.setContentView(mMenuView);
      this.setWidth(LayoutParams.MATCH_PARENT);
      if(relheight * items.length > scrheight){
         LayoutParams layoutParams = mMyListView.getLayoutParams();
         layoutParams.width = LayoutParams.MATCH_PARENT;
         layoutParams.height = scrheight;
         mMyListView.setLayoutParams(layoutParams);
         //this.setHeight(scrheight);
      } else {
      }
      this.setHeight(LayoutParams.WRAP_CONTENT);

      // 设置SelectPicPopupWindow弹出窗体可点击
      this.setFocusable(true);
      // 设置SelectPicPopupWindow弹出窗体动画效果
      this.setAnimationStyle(R.style.AnimBottom);
      // 实例化一个ColorDrawable颜色为半透明
      ColorDrawable dw = new ColorDrawable(0xb0000000);
      // 设置SelectPicPopupWindow弹出窗体的背景
      this.setBackgroundDrawable(dw);
      // mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
      mMenuView.setOnTouchListener(new View.OnTouchListener() {

         public boolean onTouch(View v, MotionEvent event) {

            int height = mMenuView.findViewById(R.id.bithday_layout_lin).getTop();
            int y = (int) event.getY();
            if (event.getAction() == MotionEvent.ACTION_UP) {
               if (y < height) {
                  dismiss();
               }
            }
            return true;
         }
      });

      mButton = (Button) mMenuView.findViewById(R.id.btn_cancel);
      mButton.setOnClickListener(this);
      mMyListView.setAdapter(mAdapter);
      mMyListView.setOnItemClickListener(this);
      this.update();
   }

   @Override
   public void showAtLocation(View parent, int gravity, int x, int y) {
      super.showAtLocation(parent, gravity, x, y);
      this.tv = (TextView) parent;
   }

   public void showAtLocationNoSetText(View parent, int gravity, int x, int y, Handler callback) {
      super.showAtLocation(parent, gravity, x, y);
      this.callback = callback;
   }


   @Override
   public void onClick(View v) {
      switch (v.getId()) {
         case R.id.btn_cancel:
            this.dismiss();
            if (callback != null) {
               callback.sendEmptyMessage(0);
            }
            break;

      }

   }

   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      if (callback != null) {
         Message msg = callback.obtainMessage(1, position, 0);
         callback.sendMessage(msg);
      }
      dismiss();
   }

   class ChatHistoryAdapter extends BaseAdapter {

      @Override
      public int getCount() {
         return items.length;
      }

      @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) {
         ChatHistoryHolder holder;
         if (convertView == null) {
            holder = new ChatHistoryHolder();
            convertView = View.inflate(context, R.layout.view_chat_select_case_item, null);
            holder.clnic_doctor_item_time_tv = (TextView) convertView.findViewById(R.id.btn_myquestion_first);
            convertView.setTag(holder);
         } else {
            holder = (ChatHistoryHolder) convertView.getTag();
         }
         holder.clnic_doctor_item_time_tv.setText(items[position]);
         return convertView;
      }

      class ChatHistoryHolder {
         TextView clnic_doctor_item_time_tv;

      }

   }
}


select_medical_case_pop.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bithday_layout_lin"
        android:background="@color/white">


        <TextView
            android:id="@+id/choose_txt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="13dip"
            android:text="选择病例"
            android:gravity="center"
            android:layout_centerInParent="true"
            android:textColor="@color/text_color_959595"
            android:textSize="@dimen/text_size_22px" />

        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dip"
            android:layout_below="@+id/choose_txt"
            android:background="@color/text_color_cccccc" />

    </RelativeLayout>

    <LinearLayout
        android:id="@+id/bithday_layout_lin"
        android:layout_width="match_parent"
        android:layout_above="@+id/bithday_layout1"
        android:background="@color/white"
        android:layout_height="wrap_content">
        <ListView
            android:id="@+id/bithday_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:divider="@color/text_color_cccccc"
            android:dividerHeight="0.1dp" />
    </LinearLayout>

    <View
        android:id="@+id/bithday_layout1"
        android:layout_width="match_parent"
        android:layout_height="10dip"
        android:layout_above="@+id/layout_cancel"
        android:background="#f2f5f7" />

    <LinearLayout
        android:id="@+id/layout_cancel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@color/white"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="match_parent"
            android:layout_height="@dimen/height50"
            android:background="@drawable/freeclinics_btn_click_bg"
            android:gravity="center"
            android:text="取 消"
            android:textColor="@color/content"
            android:textSize="@dimen/text_size_20px" />
    </LinearLayout>

</RelativeLayout>


view_chat_select_case_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="55dip"
    android:background="@drawable/freeclinics_btn_click_bg">


    <TextView
        android:id="@+id/btn_myquestion_first"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/freeclinics_btn_click_bg"
        android:gravity="center"
        android:padding="13dip"
        android:text="男"
        android:textColor="@color/content"
        android:textSize="@dimen/text_size_22px" />
</LinearLayout>







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个popwindow 并动态设置pop的高度 限定pop高度 的相关文章

  • Shopify商品置顶功能

    Shopify商品置顶功能 商品置顶功能描述 通过在商品列表页为链接添加参数的方法实现置顶某个或多个商品的功能 需按以下步骤将目标代码添加到目标位置 目标代码 assign handles assign handleSize 0 if cu
  • RabbitMQ启动没有端口号解决问题

    docker启动容器时报 Failed to create thread Operation not permitted 1 原因 docker内的用户权限受限 解决办法1 启动docker时加上参数 privileged true pri
  • 【空气检测仪专题】10.增加电池显示

    10 增加电池显示 增加了电池电量显示和充电电池动画 增加PM2 5传感器 并显示实时数据 效果如下图
  • Allegro 镜像丝印处理

    本文问题描述 Allegro 设计中丝印镜像了 在器件在正面 丝印也在正面 但是不管怎么 R 都转不过来 发现其实丝印已经被镜像至反面 可能也就需要简单左右镜像下 就可以了 如下图 艹作 在菜单栏点击view 选择Flip Design 点
  • PB(PowerBuilder)如何同消息队列(RabbitMQ)通讯

    参考文档 1 RabbitMQ入门 用途说明和深入理解 RabbitMQ入门 用途说明和深入理解 走错路的程序员的博客 CSDN博客 2 RabbitMQ进阶 管理 配置 RabbitMQ进阶 管理 配置 东孤熊猫的博客 CSDN博客 ap
  • Allegro16.6详细教程(四)

    2 PIN的定義 如果用第一種方式產生Netlist的話 就要對於一些Power pin加以定義 1 滑鼠點選想定義的零件 2 點選選單中Edit gt Part 3 用滑鼠點選想定義的Pin腳 4 點選功能表中Edit gt Proper
  • RCE 远程命令代码执行漏洞

    什么是REC Remote Command Code Execute 远程命令或者代码执行 通过构造特殊的字符串 将数据提交到WEB应用程序 并利用该方式外部程序或命令进行攻击 类似SQL注入 Web应用程序使用了一些可以执行系统命令 或者
  • DNS污染与DNS劫持

    先认识一下什么是DNS DNS 是域名系统 Domain Name System 的缩写 在Internet上域名与IP地址之间是一对一 或者多对一 的 域名虽然便于人们记忆 但机器之间只能互相认识IP地址 它们之间的转换工作称为域名解析
  • Linux 中的 chkconfig 命令及示例

    先决条件 Linux 中的运行级别 chkconfig命令用于列出所有可用的服务并查看或更新其运行级别设置 简而言之 它用于列出服务或任何特定服务的当前启动信息 更新服务的运行级别设置以及在管理中添加或删除服务 概要 chkconfig l
  • 小程序限制PC端打开 只可以在手机端打开的解决方案

    电脑版微信是支持运行小程序的 但是某一些小程序是限制在PC上打开的 那么是怎么判断打开的设备是否是Pc端呢 官方文档给出的方案是 wx getSystemInfo success res console log res model cons
  • 【Fiddler】利用FiddlerScript实现自制函数功能及一些基本实用函数。

    目录 前言 一 FiddlerScript是什么 二 代码部分 1 自定义功能函数名 2 实现Session的遍历 3 实现重发请求并选中新请求 4 常用FS函数 5 Fiddler中的延时器 总结 前言 关于FS Fiddler是我们熟悉
  • 怎样打造一个分布式数据库——rocksDB, raft, mvcc,本质上是为了解决跨数据中心的复制

    怎样打造一个分布式数据库 rocksDB raft mvcc 本质上是为了解决跨数据中心的复制 摘自 http www infoq com cn articles how to build a distributed database ut
  • Windows下jsp运行环境的配置方案

    Windows下jsp运行环境的配置方案 lt 一 gt 配置前的准备工作 软件名称 j2sdk 安装包名称 j2sdk 1 4 2 windows i586 exe 下载地址 http java sun com 软件名称 Jakarta
  • MySQL -调整列的约束

    调整列的完整性约束 主键PK 外键FK和 唯一键UK 1 新增 1 新建class表 列不设置约束 mysql gt create table class id int name varchar 64 teacher varchar 64
  • CUDA编程问题记录:能否用CPU多线程调用CUDA核函数

    问题 能否在主机端创建CPU多线程 在每个线程里调用设备端核函数的caller函数 进而实现进一步的并行运行 例如有5张图片 对于每张图片都有N个GPU线程对其进行像素操作 但是此时是逐一对这5张图片处理的 想在主机端创建5个CPU线程 每
  • STC单片机 普通 I/O 口中断功能介绍和使用

    STC单片机 普通 I O 口中断功能和使用 STC单片机普通 I O 口中断 不是传统外部中断 STC目前支持普通 I O 口中断的单片机 STC8部分以及STC32G STC8H 部分系列支持所有的 I O 中断 且支持 4 种中断模式
  • Apollo项目坐标系研究

    声明 本文系作者davidhopper原创 未经允许 不得转载 百度Apollo项目用到了多种坐标系 其中帮助文档提及的坐标系包括 全球地理坐标系 The Global Geographic coordinate system 局部坐标系
  • 雪花算法-项目中唯一ID的生成

    之前项目中使用雪花算法 生成全局唯一ID 记录一下 来源 https www cnblogs com relucent p 4955340 html 作者 永夜微光 package com wd cc common util Twitter
  • Texture::getSourceFileType()

    Texture getSourceFileType
  • 滑动窗口最大值——单调队列的实践

    一 单调队列的介绍 单调队列 即单调递减或单调递增的队列 而且 队首和队尾都可以进行出队操作 但只有队尾可以进行入队操作 它类似于下面这幅图 二 239 滑动窗口最大值 给你一个整数数组 nums 有一个大小为 k 的滑动窗口从数组的最左侧

随机推荐

  • vscode批量注释快捷键

    光标选中想要注释的所有代码 ctrl 取消同理
  • 如何在多线程异步的情况下保证事务?

    在Spring环境下 如果使用了 Transactional 注解 那么当你的 inert 操作时异步的话 则会不在当前事务里面 那么后续的回滚操作 不会将这次异步操作的插入进行回滚 那么我们有方式来保证多线程异步场景下的事务吗 Servi
  • React中的组件的渲染函数(Render Function)是什么?什么是React中的函数组件和类组件?如何在React中进行状态管理?

    1 请解释一下React中的组件的渲染函数 Render Function 是什么 以及如何使用和实现渲染函数 React中的组件可以有多种形式的渲染函数 包括传统的render 方法 以及近年来兴起的函数组件和Hooks中的useStat
  • vue封装组件

    在 Vue 中 封装组件可以使代码更加模块化和灵活 提高代码的复用性和可维护性 下面是一个简单的封装组件的示例 1 创建组件
  • Linux系统编程之信号

    本篇博客所回顾的知识 学习目标 一 信号介绍 从图中可以看出 信号的优先级是高于普通操作的 出现信号就一定要先执行完才能继续做之前的事情 注意 如何查看信号都有哪些呢 答 用命令 kill l 来do 注意 每一个进程都有一个唯一的定时器a
  • rabbitmq整合springboot:ChannelAwareMessageListener和@RabbitListener的使用

    Springboot中使用Rabbimq监听队列中有两种方式 一种是 RabbitListener注解的方式 一种是实现springboot ChannelAwareMessageListener接口的方式 前者使用如下 消费者 Compo
  • Windows 10版本business_editions和consumer_editions的区别?

    Windows 10版本business editions和consumer editions的区别 答1 二者都内置专业版 不同之处在于 consumer editions 版本包含 Home 家庭版 Education 教育版 Prof
  • websocket封装

    封装 class SocketPlugin constructor param this websocket null this isConnect false this timeoutNum null this isActivelyClo
  • 动态多光源 Light-Pre-Pass Lighting 实现

    辛苦数天 终于有所突破 在rendermonkey里用glsl实现的代码请去这里下载 关于渲染器结构设计可参见 http www cnblogs com cloudffx archive 2011 08 31 2160208 html 关于
  • java三种实现文件上传方法

    文章转载自点击看原文 前言 因自己负责的项目 jetty内嵌启动的SpringMvc 中需要实现文件上传 而自己对java文件上传这一块未接触过 且对 Http 协议较模糊 故这次采用渐进的方式来学习文件上传的原理与实践 该博客重在实践 一
  • 房屋租赁

    作者主页 编程指南针 作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智
  • Android静态注册内部类广播BroadcastReceiver

    用静态注册内部类广播出现异常 09 14 11 31 25 576 E AndroidRuntime 3391 FATAL EXCEPTION main 09 14 11 31 25 576 E AndroidRuntime 3391 ja
  • Kettle下载Redisinput插件查询Redis数据

    Kettle下载Redisinput插件查询Redis数据 安装插件 1 下载Redisinput插件 https download csdn net download ispringmw 12909650 2 将完整插件包复制到Kettl
  • CGI之C语言篇

    为什么要进行CGI编程 在HTML中 当客户填写了表单 并按下了发送 submit 按钮后 表单的内容被发送到了服务器端 一般的 这时就需要有一个服务器端脚本来对表单的内容进行一些处理 或者是把它们保存起来 或者是按内容进行一些查询 或者是
  • Kubernetes笔记 (1) - 系统概述

    Kubernetes概述 Kubernetes由google开源 它的开发和设计都深受Google内部久负盛名的系统Borg的影响 而且 它的许多顶级贡献者之前也是Borg系统的开发者 Borg是Google内部使用的大规模集群管理系统 K
  • 分布式-zookeeper

    Zookeeper的Leader选举
  • 解决The number of method references in a .dex file cannot exceed 64K的问题

    需要分包build只需要 在build gradle defaultConfig中加入 multiDexEnabled true defaultConfig multiDexEnabled true
  • POI-Excel导出:发现xxx.xlsx中的部分内容有问题

    问题场景 新项目上需要用到页面上Excel导出下载 于是把老项目中用了很久的一个Excel工具类拿了过来 因为老项目导出的是 xls文件 新项目需要导出 xlsx 就对着改了下 改完之后导出文件 发现会弹出提示 点击是之后 文件能正常查看
  • 陀螺研究院:“模式币”项目生命周期比较研究报告(附完整PDF下载)

    文 陀螺研究院 飞鱼 秀秀 最近 PGC 和 趣步 项目跑路 很多维权帖子发布在网上 引发大家的热议 如果说2019年是 平台币之年 按照这样的发展趋势 把2019年称为 模式币之年 也不为过 模式币 疯狂拉盘造成的财富效应会吸引许多人入场
  • 创建一个popwindow 并动态设置pop的高度 限定pop高度

    创建一个popwindow 并动态设置pop的高度 限定pop高度 这里举个例子 pop里面放的是一个listview 直接上代码 SelectMedicalCasePopwindow java public class SelectMed