Android简单使用PopupWindow的方法

 更新时间:2021年03月15日 09:15:51   作者:天真的赵日天  
这篇文章主要为大家详细介绍了Android简单使用PopupWindow的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Android简单使用PopupWindow的的具体代码,供大家参考,具体内容如下

思路

1.在res下面创建一个menu文件夹,并新建一个xml文件作为PoupWindow的布局文件。
2.Activity中布局填充器加载菜单布局
3.创建PopupWindow对象并设置内容以及动画
4.设置菜单布局中控件需要做的操作

menu菜单布局:

<?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:background="#eaeaea"
 android:orientation="vertical">

 <Button
 android:id="@+id/bt1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="10dp"
 android:text="选项一" />

 <Button
 android:id="@+id/bt2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="10dp"
 android:text="选项二" />

 <Button
 android:id="@+id/bt3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_marginTop="10dp"
 android:text="选项三" />
</LinearLayout>

定义动画:

在styles资源文件里写一个style继承android:Animation,并设置进出场效果
内容引用res下面的anim资源文件夹里的资源文件
将动画绑定到popuwidow

styles资源文件

在res下面创建一个anim资源文件夹

anim资源文件

popupwindow绑定动画 popupWindow.setAnimationStyle(R.style.www);

Activity

public class MainActivity extends AppCompatActivity {
 private Button bt;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 bt = findViewById(R.id.bt);
 }

 public void click(View view) { //点击事件
 View inflate = LayoutInflater.from(this).inflate(R.layout.menu, null); //布局加载器加载菜单布局
 Button bt1 = inflate.findViewById(R.id.bt1);
 Button bt2 = inflate.findViewById(R.id.bt2);
 Button bt3 = inflate.findViewById(R.id.bt3);
 /**
 * 创建PopupWindow对象 视图对象, 宽, 高,缺一不可
 * 第一种:创建对象的时候直接加参数 PopupWindow popupWindow = new PopupWindow(inflate, 200, ViewGroup.LayoutParams.WRAP_CONTENT,true);
 * 第二种 通过setContentView,setHeight,setWidth 来设置
 * 宽高可设置固定值或者ViewGroup.LayoutParams.WRAP_CONTENT
 **/
 final PopupWindow popupWindow = new PopupWindow(inflate, 200, ViewGroup.LayoutParams.WRAP_CONTENT);
 popupWindow.setOutsideTouchable(true); //点击弹窗外部是否取消弹窗
 popupWindow.setAnimationStyle(R.style.www); //设置自定义好的动画
 //弹窗出现外部为阴影
 WindowManager.LayoutParams attributes = getWindow().getAttributes();
 attributes.alpha = 0.5f;
 getWindow().setAttributes(attributes);
 //弹窗取消监听 取消之后恢复阴影
 popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
 @Override
 public void onDismiss() {
 WindowManager.LayoutParams attributes = getWindow().getAttributes();
 attributes.alpha = 1;
 getWindow().setAttributes(attributes);
 }
 });
 //选项的点击事件
 bt1.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
 popupWindow.dismiss();
 Toast.makeText(MainActivity.this, "选项一", Toast.LENGTH_SHORT).show();


 }
 });
 bt2.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
 popupWindow.dismiss();
 Toast.makeText(MainActivity.this, "选项二", Toast.LENGTH_SHORT).show();

 }
 });
 bt3.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
 popupWindow.dismiss();
 Toast.makeText(MainActivity.this, "选项三", Toast.LENGTH_SHORT).show();

 }
 });
 /**
 * 显示popupwidow两种方式
 * 1.howAsDropDown出现在下方,三个参数:1绑定的控件2.x轴偏移量 3.y轴偏移量
 * 2.showAtLocation自定义位置 四个参数 1绑定的控件 2.出现的位置 3.x轴偏移量 4.y轴偏移量
 *
 **/
 // popupWindow.showAsDropDown(bt,0,0);
 popupWindow.showAtLocation(bt, Gravity.CENTER, 0, 0);
 }
}

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

相关文章

  • Android 倒影算法的实现代码

    Android 倒影算法的实现代码

    Android 倒影算法的实现代码,需要的朋友可以参考一下
    2013-05-05
  • Flutter启动页(闪屏页)的具体实现及原理详析

    Flutter启动页(闪屏页)的具体实现及原理详析

    这篇文章主要给大家介绍了关于Flutter启动页(闪屏页)的具体实现及原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Android Universal ImageLoader 缓存图片

    Android Universal ImageLoader 缓存图片

    Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多线程异步加载,通过本文给大家介绍Android Universal ImageLoader缓存图片相关资料,涉及到imageloader缓存图片相关知识,对imageloader缓存图片相关知识感兴趣的朋友一起学习
    2016-01-01
  • 深入剖析Android的Volley库中的图片加载功能

    深入剖析Android的Volley库中的图片加载功能

    这篇文章主要介绍了Android的Volley框架中的图片加载功能,从源码剖析了Volley加载图片时的请求队列处理等方面,需要的朋友可以参考下
    2016-04-04
  • Android使用Scroll+Fragment仿京东分类效果

    Android使用Scroll+Fragment仿京东分类效果

    这篇文章主要为大家详细介绍了Android使用Scroll+Fragment仿京东分类效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Android实现水波纹特效

    Android实现水波纹特效

    这篇文章主要为大家详细介绍了Android实现水波纹特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Android 使用ViewPager实现左右循环滑动及轮播效果

    Android 使用ViewPager实现左右循环滑动及轮播效果

    ViewPager是一个常用的Android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验,接下来通过本文给大家介绍Android 使用ViewPager实现左右循环滑动及轮播效果,一起看看吧
    2017-02-02
  • Android手势操作识别详解

    Android手势操作识别详解

    这篇文章主要为大家详细介绍了Android手势操作识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 基于Android XML解析与保存的实现

    基于Android XML解析与保存的实现

    本篇文章小编为大家介绍,基于Android XML解析与保存的实现。需要的朋友参考下
    2013-04-04
  • android ListView结合xutils3仿微信实现下拉加载更多

    android ListView结合xutils3仿微信实现下拉加载更多

    本篇文章主要介绍了android ListView结合xutils3仿微信实现下拉加载更多,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论