Android 弹出菜单PopupWindow

Android开发学习(14)Popupwindow右上角弹出菜单 很多安卓app的右上角都有弹出菜单,今天我们继续丰富我们的计算机app,前几篇博客我们为他增加了历史记录的功能,今天我们使用Popupwindow做一个右上角弹出的按钮。 效果: 布局按钮主界面menu_popwindow.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.a 阅读详情

利用继承PopupWindow,自定义类实现弹出菜单并为弹出菜单添加动画效果。

自定义PopupMenu继承PopupWindow:

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;
import android.widget.TextView;

public class PopupMenu extends PopupWindow implements OnClickListener {

	private Activity activity;
	private View popView;

	private int mWidth;
	private int mHeight;

	private View v_item1;
	private View v_item2;
	private View v_item3;

	private OnItemClickListener onItemClickListener;

	/**
	 *
	 * 枚举,选择选项标识
	 */
	public enum MENUITEM {
		ITEM1, ITEM2, ITEM3
	}

	private String[]  tabs;

	public PopupMenu(Activity activity ,String[] tabs) {
		super(activity);
		this.activity = activity;
		this.tabs = tabs;
		Display display = activity.getWindowManager().getDefaultDisplay();
		mWidth = display.getWidth();
		mHeight = display.getHeight();
		LayoutInflater inflater = (LayoutInflater) activity
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		popView = inflater.inflate(R.layout.popup_menu, null);// 加载菜单布局文件
		this.setContentView(popView);// 把布局文件添加到popupwindow中
		this.setWidth(mWidth*4/5);// 设置菜单的宽度(需要和菜单于右边距的距离搭配,可以自己调到合适的位置)
		this.setHeight(LayoutParams.MATCH_PARENT);
		this.setFocusable(true);// 获取焦点
		this.setTouchable(true); // 设置PopupWindow可触摸
		this.setOutsideTouchable(true); // 设置非PopupWindow区域可触摸
		this.setAnimationStyle(R.style.popupAnimation);
		ColorDrawable dw = new ColorDrawable(0x00000000);
		this.setBackgroundDrawable(dw);

		// 获取选项卡
		v_item1 = popView.findViewById(R.id.ly_item1);
		v_item2 = popView.findViewById(R.id.ly_item2);
		v_item3 = popView.findViewById(R.id.ly_item3);
		// 添加监听
		v_item1.setOnClickListener(this);
		v_item2.setOnClickListener(this);
		v_item3.setOnClickListener(this);

	}


	/**
	 * 设置显示的位置
	 *
	 * @param resourId
	 *            这里的x,y值自己调整可以
	 */
	public void showLocation(int resourId) {
		showAsDropDown(activity.findViewById(resourId), dip2px(activity, 0),
				dip2px(activity, -8));
	}

	@Override
	public void onClick(View v) {
		MENUITEM menuitem = null;
		String str = "";
		if (v == v_item1) {
			menuitem = MENUITEM.ITEM1;
			str = tabs[0];
			TextView tvAboutUs = (TextView)v_item1.findViewById(R.id.tv_about_us);
			tvAboutUs.setText(str);
		} else if (v == v_item2) {
			menuitem = MENUITEM.ITEM2;
			str = tabs[1];
			TextView tvAboutUs = (TextView)v_item2.findViewById(R.id.tv_check_update);
			tvAboutUs.setText(str);
		} else if (v == v_item3) {
			menuitem = MENUITEM.ITEM3;
			str = tabs[2];
			TextView tvAboutUs = (TextView)v_item3.findViewById(R.id.tv_feedback);
			tvAboutUs.setText(str);
		}
		if (onItemClickListener != null) {
			onItemClickListener.onClick(menuitem, str);
		}
		dismiss();
	}

	// dip转换为px
	public int dip2px(Context context, float dipValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dipValue * scale + 0.5f);
	}

	// 点击监听接口
	public interface OnItemClickListener {
		void onClick(MENUITEM item, String str);
	}

	// 设置监听
	public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
		this.onItemClickListener = onItemClickListener;
	}

}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:background="#33000000"
    android:orientation="vertical"
    android:layout_gravity="center">
    <LinearLayout
        android:id="@+id/ly_item1"
        android:layout_width="match_parent"
        android:layout_height="45dip"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:background="@drawable/bg_default_button_selector">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:paddingLeft="20dip"
            android:id="@+id/tv_about_us"
            android:textColor="#595d5f"
            android:text="选项一" />

    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dip"
        android:background="#eeeeee" />
    <LinearLayout
        android:id="@+id/ly_item2"
        android:layout_width="match_parent"
        android:layout_height="45dip"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:background="@drawable/bg_default_button_selector">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="20dip"
            android:paddingRight="20dip"
            android:visibility="gone" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:paddingLeft="20dip"
            android:textColor="#595d5f"
            android:id="@+id/tv_check_update"
            android:text="选项二" />
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dip"
        android:background="#eeeeee" />
    <LinearLayout
        android:id="@+id/ly_item3"
        android:layout_width="match_parent"
        android:layout_height="45dip"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:background="@drawable/bg_default_button_selector" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="20dip"
            android:paddingRight="20dip"
            android:visibility="gone" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:paddingLeft="20dip"
            android:textColor="#595d5f"
            android:id="@+id/tv_feedback"
            android:text="选项三" />
    </LinearLayout>

</LinearLayout>

anim文件夹中定义动画文件:

in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="-100%"
        android:toXDelta="0" />
    <alpha
        android:duration="500"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="0"
        android:toXDelta="-100%" />
    <alpha
        android:duration="500"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

定义style:

<style name="popupAnimation" parent="android:Animation">
    <item name="android:windowEnterAnimation">@anim/in</item>
    <item name="android:windowExitAnimation">@anim/out</item>
</style>

通过setAnimationStyle方法设置popupAnimation实现动画效果。

调用方式:通过showAtLocation设置弹出菜单弹出的位置,实现setOnItemClickListener监听点击选项回调事件。

Android弹出菜单实例:使用PopupWindow实现 然后,我们使用LayoutInflater从布局文件中填充弹出菜单的内容,并将其设置为PopupWindow的内容。在这段代码中,我们首先通过findViewById获取到显示弹出菜单按钮的引用(在布局文件中使用id为btnShowMenu的Button)。您可以通过修改菜单布局文件和处理弹出菜单的代码来适应您的特定需求。在Android应用程序中,弹出菜单是一种常见的用户界面元素,它可以在用户点击或触摸屏幕时显示一个临时菜单。首先,我们需要创建一个布局文件来定义弹出菜单的内容。第一步:创建布局文件。 阅读详情

相关推荐

我的Android进阶之旅------>Android用PopupWindow实现弹出菜单实例

step1:新建项目PopWindow,并导入菜单项使用的图片到/res/drawable目录下               (项目总览图)                                                   (drawable目录截图)        step2:设置应用的UI界面  a.应用的总体界面,main.xml <LinearLayout

字节卷动 8664

Android开发笔记(一百二十一)列表弹窗PopupMenu和ListPopupWindow

PopupMenu 基本用法 PopupMenu是种显示位置不固定的弹出菜单,因为它显示在参照控件下方,所以展示位置随着参照控件的位置变化而变化。而其他几种菜单的显示位置都是固定的,比如说选项菜单Options固定显示在屏幕下方,上下文菜单ContextMenu固定显示在屏幕中央,溢出菜单OverflowMenu固定显示在屏幕右上角,有关其他菜单的详细说明参见《Android开发笔记(六十五)

aqi00的博客 2万+

Android下拉菜单弹出和收缩效果实现指南

PopupWindow是一种可以在屏幕上显示自定义内容的悬浮窗组件,广泛应用于Android应用中,用于提供额外的信息显示或操作选项。它不会占据屏幕主要部分,使得用户在与主界面交互的同时,也能轻松查看或使用PopupWindow内的内容。菜单项的样式和属性决定了下拉菜单的外观和用户交互体验。以下是一些关键属性::菜单项的宽度,常用值包括和。:菜单项的高度,同上。:菜单项的内边距,为菜单项添加边距可以使内容显得更为清晰。:菜单项的文字颜色。

weixin_35950531的博客 1349

android实现菜单栏第三部分popupmenu,弹出式菜单

点击布局内菜单按钮会弹出菜单 就成跟其他菜单差不多,首先是在主界面建一个按钮,然后写出菜单布局,最后在主页面写出逻辑,按钮我们写一个点击事件,等会在主界面在这个点击事件里面写菜单 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" ..

qq_42890648的博客 2220

自定义实现Android底部弹出菜单的PopupWindow实践

PopupWindow 是 Android 中的一个类,用于显示悬浮的窗口。它可以像对话框一样浮动于其他视图之上,常用于显示菜单项、列表、图片等。PopupWindow 的灵活性和定制性较高,可以通过多种方式来定义和控制其行为。在Android中,菜单界面通常通过XML布局文件来定义。以下是创建一个简单弹出式菜单界面的XML代码示例:<Buttonandroid:text="菜单项1"<Buttonandroid:text="菜单项2"-- 更多菜单项... -->

weixin_35751194的博客 1114

树莓派3-改装wifi外置天线

声明:本文只是技术性探讨,改装引起的产品损坏等后果,由用户自负! 改装主要有两种方法 方法一:直接替换原来的天线 1、移除原有的小陶瓷天线,就在Made in PRC(或UK)那边的那个 清理一下阻焊剂方便天线接地(图中PRC左侧) 2、焊接天线 天线的屏蔽层焊接到清理完阻焊剂的地方,中间的信号线焊接到PRC右侧焊盘。 3、最终的样子

huayucong的博客 2万+

popwindow在view左侧弹出,附加弹出动画

直接代码 /** * 显示popwindow * * @param pop_option 需要显示的pop样式view */ private void showPopupWindow(View pop_option) { mPopupmenuView = new PopupWindow(pop_option, ViewGrou...

Yan的博客 864

Unity事件总线第一篇:为什么你的游戏需要一个事件总线?

本文探讨了游戏开发中常见的跨模块调用导致代码强耦合的问题。通过一个攻击按钮触发角色攻击、怪物掉血和血条更新的案例,分析了直接调用方式带来的维护困难、扩展性差和模块重用性低等弊端。文章提出使用事件总线(Event Bus)作为解决方案,通过发布-订阅模式实现模块解耦。重构后的代码中,各模块只需与事件总线交互,彼此不再直接依赖。这种设计使得新增功能(如音效)无需修改现有代码,大大提高了系统的可维护性和扩展性,同时增强了模块的重用性,完美体现了开闭原则。

qq_46348216的博客 1298

android一个弹出菜单的动画(一)

先上效果图: 先写Layout文件: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="verti...

weixin_34221073的博客 335

CST实战:5分钟搞定圆极化天线轴比分析(含远场设置技巧)

本文提供了一份CST Studio Suite圆极化天线轴比分析的实战指南。文章详细讲解了轴比的概念与工程标准,并重点演示了如何正确设置远场监视器以获取Axial Ratio数据,包括关键步骤与后处理技巧。最后,通过植入式天线在生物组织环境中的案例,分析了复杂环境对轴比性能的影响及优化思路。

nokia的博客 997

状态机设计与实现( stm32小车避障为例)

本文以STM32小车避障为例,介绍了状态机设计与实现方法。首先阐述了状态机的事件驱动特性、清晰结构和易扩展优势,并给出硬件组成框架。核心实现部分展示了状态枚举定义、状态转移图和主循环框架,通过switch-case结构实现状态切换。关键状态示例包括前方扫描和转向决策逻辑,通过传感器数据驱动状态转移。总结指出状态机设计需定义枚举状态、实现状态函数、使用switch跳转并更新全局状态。文章最后声明内容为学习笔记,欢迎读者指正交流。全文结构清晰,代码示例具体,为嵌入式系统状态机设计提供了实用参考。

2302_80219536的博客 1046

Android之用PopupWindow实现弹出菜单

Android之用PopupWindow实现弹出菜单---多选项、分栏菜单

kkfdsa132的专栏 7万+

使用手机录制rosbag包

使用手机作为便携式数据采集设备来录制rosbag。

weixin_38582851的博客 615

android popupwindow弹出菜单,Android popupwindow实现弹出菜单效果.pdf

Android popupwindow实现弹出菜单效果上面图片中的确定按钮的效果。也就是弹出菜单。主activity布局01. 02.03.04. 05. android:id="@+id/com_example_menueffect_effect1_relativeLayout"06. android:layout_height="match_parent"07....

weixin_35639750的博客 145

2025华为OD机试真题+全流程解析+备考攻略+面试技巧+机考经验分享+Java/python/JS/C++/C语言实现

本专栏包含华为 OD 机试最新的 A卷+B卷+C卷+D卷+E卷题库,为全网最全、最新题库,500+真题。每一篇文章都包含了题目描述、解题思路以及实现代码。同时免费提供最新的在线OJ 刷题系统。已有上百名小伙伴通过刷真题题库通过了华为od机考,拒绝一切形式的代考,替考行为!!!以下是本专栏详细内容介绍:本专栏提供在线OJ刷题系统:OJ题库OJ系统注册&使用教程:OJ使用教程其他专栏以及答疑介绍:50+ 高频面试手撕真题,已有上百位小伙伴高频认证。1:机试没过,半年的冷冻期。2:已经订阅过我专栏的同学,推荐新人

MISAYAONE的博客 2225

NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化

本文介绍了在项目开发中实现坐标转换的方法,重点解析了两个关键函数UF_MTX4_csys_to_csys和UF_MTX4_vec3_multiply的使用。通过4个变换矩阵(transform1-4)实现工作坐标系与绝对坐标系之间的相互转换,并以圆柱体为例详细说明了坐标转换的具体实现过程,包括原点、X/Y轴方向的转换处理。相比之前采用的if-else判断方法,这种矩阵转换方式在代码复杂度和运行效率上都更具优势。

weixin_47753171的博客 600

android底部弹出下拉菜单,Android PopupWindow实现右侧、左侧和底部弹出菜单

本教程为大家分享了Android PopupWindow弹出菜单的具体代码,供大家参考,具体内容如下项目SDK是5.1,建议将代码拷到自己的工程中去代码如下:MainActivity类:package com.example.popupleftmenu;import android.app.Activity;import android.content.Context;import android...

weixin_39831242的博客 779

matlab 异常值检测与处理——Robust Z-score法【2024最新版】

博客长期更新,本文最近一次更新时间为:2024年12月9日。

点云侠的博客 1516

[Android实例] popupwindow实现弹出菜单效果

上面图片中的确定按钮的效果。 也就是弹出菜单。 主activity布局      android:id="@+id/com_example_menueffect_effect1_relativeLayout"         android:layout_height="match_parent"         android:l

我的专栏 1129

jre9下载 jdk9

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

IEM模型,地表粗糙度模拟

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

Android开发技巧——使用PopupWindow实现弹出菜单

当android原生的弹出菜单已不能满足我们的需求时,自定义菜单就成了我们的唯一选择,在本文当中,我将与大家分享如何使用PopupWindow实现弹出菜单。 1.弹出菜单的封装PopMenu 1 import java.util.ArrayList; 2 import cn.com.ista.pdachina.R; 3 import android.content.Cont...

weixin_30673715的博客 124

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 弹出菜单动画,android popwindow实现左侧弹出菜单层及PopupWindow主要方法介绍...

PopupWindow可以实现浮层效果,主要方法有:可以自定义view,通过LayoutInflator方法;可以出现和退出时显示动画;可以指定显示位置等。为了将PopupWindow的多个功能展现并力求用简单的代码实现,编写了一个点击按钮左侧弹出菜单的功能,实现出现和退出时显示动画效果并点击其他区域时弹出层自动消失,效果图如下:源码:1.PopwindowOnLeftActivity.javap...

weixin_34401781的博客 678

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: JavaScript 利用定时器setInterval实现不断来回移动碰撞动画
下一篇: Android 自定义FloatView实现悬浮视图
KingToAce
博客等级 码龄10年 9粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值