android PopupWindow 点击外面消失

最近工作需求需要用到PopupWindow ,MainActivity.java代码如下:

package com.example.administrator.popuwindow;

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.PopupWindow;import android.widget.TextView;

public class MainActivity extends AppCompatActivity{

    private TextView textView;    private   PopupWindow popupWindow;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         textView = (TextView)findViewById(R.id.tv);        textView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {

                 popupWindow = new PopupWindow(LayoutInflater.from(MainActivity.this).inflate(R.layout.pop_list, null), ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);                popupWindow.showAtLocation(textView, Gravity.CENTER,0,0);            }        });    }

}pop_list.xml 如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="160dp"    android:layout_height="160dp"    android:orientation="vertical"    android:background="#ffffff"    android:gravity="center"    tools:context="com.example.administrator.popuwindow.MainActivity">

    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="16dp"        android:text="回复"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="16dp"        android:text="删除"/></LinearLayout>
效果如图:

可是有个问题,只有按返回键才popuwindown才会消失,点击屏幕没有反应,在网上搜出的答案说是在
showAtLocation调用之前,加上以下两句,
popupWindow.setOutsideTouchable(true);popupWindow.setBackgroundDrawable(new BitmapDrawable());发现然并卵,百思不得其解,经过反复思考,发现这一段代码写得有问题:
popupWindow = new PopupWindow(LayoutInflater.from(MainActivity.this).inflate(R.layout.pop_list, null), ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);改成如下:
popupWindow = new PopupWindow(LayoutInflater.from(MainActivity.this).inflate(R.layout.pop_list, null), ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);原因很简单,因为前者这样写得话,popupWindow 把整个window都遮挡了,所以popupWindow.setOutsideTouchable(true)并没有起到作用,所以失效
时间: 2024-09-28 17:31:20

android PopupWindow 点击外面消失的相关文章

Android 使alertDialog.builder不会点击外面和按返回键消失

这个问题之前一直困扰我,我的需求就是点击对话框外面和按返回键对话框不会消失,按返回键还好解决,拦截下返回键就OK了. 但是点击外面不好解决.之前有人说模态对话框,我看了一会,觉得不是我想要的效果.popWindow的话,必须提供父view. 重新看下api,发现设置setCancelable属性就行了. 如: public void showNoProject(){ Builder builder = new AlertDialog.Builder(MainActivity.this) .set

Android 响应menu,back键,点击外部消失

点击外部消失,只需要设置popupWindow.setBackgroundDrawable(new PaintDrawable()); 设置 popupWindow.setFocusable(true); //popupWindow.setBackgroundDrawable(new PaintDrawable()); popupWindow.setOutsideTouchable(true); popupWindow_view.setFocusableInTouchMode(true);也可以

关于Android PopupWindow中实用Spinner控件点击APP Crash情况整理!

场景异常信息如下: android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? at android.view.ViewRootImpl.setView(ViewRootImpl.java:646) at android.view.WindowManagerGlobal.addView(Wi

Android popupwindow以及windowManager总结——实现悬浮效果

Android有三类窗口 应用程序窗口 (Application Window): 包括所有应用程序自己创建的窗口,以及在应用起来之前系统负责显示的窗口. 子窗口(Sub Window):比如应用自定义的对话框,或者输入法窗口,子窗口必须依附于某个应用窗口(设置相同的token). 系 统窗口(System Window): 系统设计的,不依附于任何应用的窗口,比如说,状态栏(Status Bar), 导航栏(Navigation Bar), 壁纸(Wallpaper), 来电显示窗口(Phon

Android PopupWindow 仿微信弹出效果

项目中,我需要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果,这样大家直接拿到项目里就可以用了!首先让我们先看效果: 那么我首先先看下布局代码非常简单:如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pop_layout" android:layout_

Android—PopupWindow的简单使用

PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,这个Demo要实现的功能是,点击布局中的两个按钮,进而控制PopupWindow的显示与消失,代码中有详细的注释首先看一下效果展示: 在上代码之前,先总结一下PopupWindow的用法: 1:实例化PopupWindow的对象,三个参数分别对应:填充的布局文件.在当前Activity上所占的宽.高 PopupWindow popupWindow= new PopupWindow(contentView, Layou

Android PopupWindow使用之地区、学校选择二级联动

最近在做一个社交类APP时,希望用户在注册时根据地区来选择自己所在的学校,由于用户手动输入学校,可能会出现各种问题,不利于后面对用户信 息的统计.于是决定在客户端做好设置,用户只要根据地区来选择就好.第一想法就是使用PopupWindow,用弹框的方式让用户来选择.让实现的效果如 下: 下面就来讲一下是如何实现的(数据是从网络获取的,JSON解析使用的是Gson,网络库用的是Volley) 工程结构: 1.创建一个布局文件:view_select_province_list.xml,主要包括一个

Android应用程序“R文件”消失

其实Android自己维护这一个 public final class R类主要是跟新资源文件,这个R.java无需我们自己去修改,如果你不了解千万不要去修改它,它定义的每个资源值都是唯一的,不会和系统冲突.这个文件由ADT插件自动更新,当你编辑过Res文件后保存,这个类就会自动更新. R.java里面一般有attr.drawable.id.raw.layout.string以及xml等,根据你工程使用的资源而定.当R.java文件丢失时,就需要重建这个,但是可能会存在一些问题,比如资源无法自动

Android PopupWindow显示在控件上方或者下方

项目中实现 主要代码如下 View view = mInflater.inflate(R.layout.layout_popupwindow, null); PopUpwindowLayout popUpwindowLayout = (PopUpwindowLayout) view.findViewById(R.id.llayout_popupwindow); popUpwindowLayout.initViews(mContext, titles, false); final PopupWin