简单的popupWindow的demo

Android UI组件系列(十五):三种常用 Android 弹窗/菜单组件详解:PopupMenu、PopupWindow、ContextMenu 在本篇文章中,我们将结合一个简单 Demo,一次性带你搞清楚三种最常用的“菜单与弹窗”组件: PopupMenu:轻量级点击菜单,适合显示系统风格的选项列表; PopupWindow:功能灵活的弹出框,支持自定义布局与样式; ContextMenu:长按触发的上下文菜单,适合为内容项添加额外操作。 阅读详情

MainActivity:

package tech.androidstudio.popupwindowsimpledemo;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener {

    private ListView mListView;
    private ArrayList<SubItem> subItems;

    //首先是创建一个listView ,这里面的内容是包含了一个listView的类的列表
    //然后给这个添加popupwindow,在onItemClick的回调里面。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mListView = (ListView)findViewById(R.id.listView);
        subItems = new ArrayList<SubItem>();
        for (int i = 0; i < 5; i++) {
            ArrayList<String> data = new ArrayList<String>();
            for (int j = 0; j < 6; j++) {
                data.add(new String(i+"子项目"+j));
            }
            SubItem subItem = new SubItem("主项目"+i,data);
            subItems.add(subItem);
        }

        SubItemAdapter adapter = new SubItemAdapter(subItems);

        mListView.setAdapter(adapter);

        mListView.setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        PopupWindow popupWindow = new PopupWindow(this);

        //代码创建一个subListView
        ListView subListView = new ListView(this);
        subListView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        ArrayList<String> subList= new ArrayList<String>();
        subList=subItems.get(position).getSubList();

        ArrayAdapter<String> subAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,subList);

        subListView.setAdapter(subAdapter);

        //这步很重要
        popupWindow.setContentView(subListView);
        //设置这个宽度和高度和上一保持一直
        popupWindow.setHeight(view.getHeight());
        popupWindow.setWidth(view.getWidth());

        popupWindow.setTouchable(true);
        popupWindow.setOutsideTouchable(true);
        popupWindow.setFocusable(true);

        //通过getLocationOnScreen来获取view在屏幕中的位置
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        //上方:popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight());
        //左边:popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-popupWindow.getWidth(), location[1]);
        //右边: popupWindow.showAtLocation(mListView, Gravity.NO_GRAVITY,width,location[1]);
        popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,location[0]+view.getWidth(),location[1]);
    }

    public class SubItem{
        private String name;
        private ArrayList<String> subList;

        public SubItem(String name, ArrayList<String> subList) {
            this.name = name;
            this.subList = subList;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public ArrayList<String> getSubList() {
            return subList;
        }

        public void setSubList(ArrayList<String> subList) {
            this.subList = subList;
        }
    }

    public class SubItemAdapter extends BaseAdapter {

        ArrayList<SubItem> subItems = new ArrayList<SubItem>();

        public SubItemAdapter(ArrayList<SubItem> subItems) {
            this.subItems = subItems;
        }

        @Override
        public int getCount() {
            return subItems.size();
        }

        @Override
        public Object getItem(int position) {
            return subItems.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View ret = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_listview, parent, false);
            TextView tv = (TextView)ret.findViewById(R.id.text1);
            tv.setText(subItems.get(position).getName());
            return ret;
        }
    }
}



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <ListView android:text="Hello World!" android:layout_width="158dp"
        android:layout_height="wrap_content"
        android:id="@+id/listView"/>
</RelativeLayout>

item_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content">
<TextView
    android:layout_width="158dp"
    android:layout_height="50dp"
    android:id="@+id/text1"/>
</LinearLayout>


 PopupWindow的二级菜单的简单demo

 

简单的popupWindow的demo

 

Popupwindow的动画的设置





实现多级PopupWindow交互的小demo 本文还有配套的精品资源,点击获取 简介:PopupWindow是Android中用于创建弹出式窗口的UI组件,提供了轻量级对话框的替代方案。本小demo将演示如何构建和使用多级PopupWindow,包括设置内容视图、显示位置、显示与隐藏方法,以及添加动画效果等编程技巧。开发者可以借鉴示例代码,掌握PopupWindow的特性和在应用中实现复杂交互的能力。 1. ... 阅读详情

相关推荐

安卓popupwindow相关-收藏的Popwindow弹出的小demo.rar

收藏的Popwindow 弹出的小demo.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

PopupWindowDemo

public class MainActivity extends Activity {     private PopupWindow pw; private View item; private Button v; private ScaleAnimation sa; @Override     protected void onCreate(Bundle save

王智超的博客 356

popupwindow完美demo

完美实现popupwindow,popupwindow弹出背景变暗,popupwindow消失背景回复。popupwindow圆角显示。

【Android开发日记】Popupwindow 完美demo

完美实现popupwindow,popupwindow弹出背景变暗,popupwindow消失背景回复。popupwindow圆角显示。

GeekLei 7254

PopupWindow测试demo(解决PopupWindow被输入法弹上去之后无法恢复原位问题)

http://blog.youkuaiyun.com/zhufuing/article/details/17783333博文所用测试demo

计算机组成原理(二)—— 数据的表示与运算

本章目录引言一、数制与编码1.1 进位计数制1.1.1 进制及转换1.1.2 真值、机器数1.2 BCD码1.3 ASCII 码1.4 校验码1.4.1 奇偶校验码1.4.2 海明码1.4.3 CRC循环冗余码二、定点数的表示和运算2.1 定点数的表示2.1.1 无符号2.1.2 有符号(原码、反码、补码、移码)2.2 定点数的运算2.2.1 移位运算2.2.2 加减运算(溢出判断)2.2.3 乘法运算2.2.4 除法运算2.3 强制类型转换2.4 数据的存储和排列三、浮点数的表示和运算3.1 浮点数的表示

S mile0804的博客 7473

Android封装之PopupWindow(一) (带demo)

一、前言Android的对话框有两种:PopupWindow和AlertDialog。它们的不同点在于:AlertDialog的位置固定,但是PopupWindow的位置可以随意, AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的。PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件

徐宏的博客 | 修身齐家治国平天下 4200

【STK】手把手教你利用STK进行导弹和反导仿真02 - STK/MMT模块01 导弹任务分析工具概述

种工具:导弹设计工具(Missile Design Tool,MDT )、导弹飞行工具(Missile Flight Tool,截弹,或者用内置拦截弹编辑器创建的个性化的拦截弹, IFT 能够对 ―一对一 ‖动能拦截。导设置系统参数, 并对其有效性进行验证, 画性能图,保证该设计是可行的。(SAIC)公司联合开发研制,极大扩展了 STK 原有的导弹对象的功能,能够精确仿真。IFT 能够对拦截飞机、 导弹、卫星等目标进行仿真和分析。(2)推进系统参数,包括推力,比冲,秒流量,推力持续时间,喷嘴出口面积,

weixin_44184852的博客 1876

Android开发技术学习之popupwindow的弹窗实现

*好久没有写博客了,今天给大家写点东西。最近有个需求是需要实现popupwindow的弹窗功能。就是大家常见的qq,微信,钉钉等有的功能。如下图所示: 如上图所示,三个我用的比较多的软件,都会有这个功能。废话不多说,下面来给大家讲讲具体的实现方法吧!该demo实现的效果与钉钉的较为相似,在这里给大家讲一些需要用到的知识点,这样下次再做这个功能的时候自己就可以很快的实现了,甚至还能加上一些你自己

活在当下!输出快乐! 4万+

36、T5L 迪文屏C51开发之绘制动态曲线

T5L 迪文屏C51开发之绘制动态曲线1、介绍2、例程功能简介3、GUI界面设计3、C51程序设计 1、介绍   本文将利用DGUS Tool软件中的【动态曲线控件】来绘制曲线效果,在T5L迪文屏中总共支持8个通道的曲线,而曲线数据是需要缓冲区的,如果 8 通道曲线同时使用,0x1000-0x4FFF 将作为曲线缓冲区地址,此时该部分变量地址不能被其他控键使用,其他控键地址使用范围为0x5000-0xFFFF,当某曲线通道不被使用时,那么其所对应的缓冲区地址可以做其他用途,曲线通道具体的地址分布如下图所示:

嵌入式羊圈 3131

[数学建模][2012年A国赛模拟] 3. 葡萄酒的评价

暑期学校数学建模培训第三次模拟:2012年国赛A题,一道完全统计方面的题目。据老师反映当年有位老师所带领小组取得“全国10佳优秀论文奖”,我们大组搞统计的老师建模能力不行,但其统计理论非常扎实,在此期间给予我们非常大的帮助,十分感谢老师的倾囊相授。我们小组的定位也不在统计方向,主攻物理建模及优化模型,故本次模拟就用SPSS软件简单做了下,还是学到了多元统计的许多知识,达到了本次训练的目的。 ...

Y-puyu 的博客 3万+

PopupWindow的二级菜单的简单demo

MainActivity.java package tech.androidstudio.threelevelpopupwindowsimpledemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.

Kodulf的专栏 1967

2024-江苏科技大学-模拟-动态接触角,模拟液滴撞击,comsol软件模拟。

相反,其对液滴粘度和平衡接触角的变化基本不敏感。重力势能的影响显著受过程参数调节,随着液滴直径和密度的增加而增加,而随着初始液滴速度和表面张力系数的增加而减小。通过考虑形状因子和粘度修正因子,可以准确定义表面能和粘性耗散能,使得所提出的半经验修正勺状模型表现出良好的性能,在所有65个研究案例中,液滴最大铺展长度因子(βmax)和中心厚度(h)的相对误差基本分别落在5%和10%的区间内。重力势能的影响受过程参数显著调节,随液滴直径和密度的增大而增大,随液滴初始速度和表面张力系数的增大而减小。

qq_15963745的博客 512

Popupwindow的动画的设置

首先在anim 里面设置动画的,弹出和隐藏 弹出:首先扩展到1.1倍,然后返回原来的大小 <scale android:fromXScale="0.6" android:toXScale="1.1" android:fromYScale="0.6" android:toYScale="1.1"

Kodulf的专栏 1090

Sigrity System Explorer ViaWizard模式进行过孔建模和仿真分析操作指导

点击TVac_lower tdvac_lower,自动跳转到2D时域曲线,查看最小低电平穿过VIL(ac)max电压的延时,结果如下。点击TVac_high tdvac_high,自动跳转到2D时域曲线,查看最小高电平穿过VIH(ac)min电压的延时,结果如下。点击max Vix_Rise,自动跳转到2D时域曲线,查看上升边PN交叉点与参考电压VREF(dc)的偏差,结果如下。Threshold:阈值,软件自带3个模板,default,Tr01,Tr02,本例选择Default。

weixin_54787054的博客 571

如何通过conda安装HyPhy教程

本文介绍了在Ubuntu系统上通过conda安装分子进化分析工具HyPhy的详细步骤。首先创建conda环境并指定Python 3.8版本,然后通过bioconda通道安装HyPhy软件包。安装完成后可通过conda list命令验证安装。文中还特别指出可能遇到的libcrypto.so.1.1共享库缺失错误,并提供了解决方案的参考链接。该教程配有安装过程截图,帮助用户直观了解操作流程和验证安装结果。

猿小白的博客 8260

超级简单的自定义PopupWindow 子控件的四个方向 底部

超级简单的自定义PopupWindow 子控件的四个方向 底部

随意而然的专栏 4691

高速特征金字塔多角度旋转模板匹配(工业零部件缺陷检测C++ Opencv版)

博主在性能较好的笔记本上测试算法全部执行效果大约为45ms,在一般配置的笔记本上博主在性能较好的笔记本上测试算法全部执行效果大约为130ms。下图即为实际检测效果。本文最后附有完整代码:Qt版和MFC版本(可直接运行)。...

认真努力,做一只会飞的毛毛虫。 5547

Android之PopupWindow

来自:http://blog.youkuaiyun.com/android_tutor/article/details/5576533 大家好,我们这一节讲的是Android PopupWindow的使用! 在我理解其实PopupWindow其实类似于一个不能动的Widget(仅从显示效果来说!)   它是浮在别的窗口之上的.   下面我将给大家做一个简单的Demo,类似于音乐播放器的W

860

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android Spinner 用PopupWindow实现

先看效果图: 控件类: import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class

Anddroid_LanYan的专栏 2186

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android实现多级弹窗,几步实现Android 开发中的弹窗效果

可能你们常常用弹出对话框也就是AlertDialog来进项一些操做, html今天咱们用另一种弹窗效果来完成 java使用的到类PopupWindow android官方说明: appPopupWindow extendsObject↳android.widget.PopupWindow 函数Class OverviewA popup window that can be used to disp...

weixin_28861381的博客 624

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

图片选择(相片和图库)

模仿有的app从

yf0994的专栏 1183

popupwindow组件demo

public class PopupActivity extends AppCompatActivity { private Context c; PopupWindow p ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alertview)

weixin_43292547的博客 177

popupWindow demo

viewHolder.ivUserChoose.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View contentView = LayoutInflater.from(mContext).inflate...

琦琦的博客 249
上一篇: android 之popupWindow 在指定位置上的显示
下一篇: PopupWindow的二级菜单的简单demo
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值