弹出PopuoWindow后 代码里设置的是PopupWindow默认获取焦点 所以PopupWindow显示的时候其它控件点击是没有反应的

用到的方法是

pwMyPopWindow.setFocusable(true);

代码里还设置了

pwMyPopWindow.setBackgroundDrawable(this.getResources().getDrawable(
R.mipmap.ic_launcher));// 设置背景图片,不能在布局中设置,要通过代码来设置
pwMyPopWindow.setOutsideTouchable(true);// 触摸popupwindow外部,popupwindow消失。这个要求你的popupwindow要有背景图片才可以成功
这样点击PopupWindow外部就会自行消失 当我们弹出PopupWindow的时候让背景变半透明 当PopuuWindow消失时让背景变回原样 这样就实现了多数app中PouupWindow的使用效果
用到的方法是
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
getWindow().setAttributes(lp); 下面是代码
<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"
tools:context=".MainActivity"
android:background="#ffffff" > <LinearLayout
android:id="@+id/ll_head_bar"
android:layout_width="wrap_content"
android:layout_height="400dp"
android:orientation="vertical">
<!--这个图片按钮按下时弹出PopupWindow-->
<ImageButton
android:id="@+id/ib_operate_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />
<!--这个按钮是测试当PoupWindow显示时点击此按钮没反应 因为此按钮没获取焦点-->
<Button
android:layout_marginTop="200dp"
android:layout_gravity="bottom"
android:id="@+id/ib_operate_more2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试按钮" />
</LinearLayout> </RelativeLayout>

<?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:gravity="center"
android:orientation="vertical" > <TextView
android:id="@+id/tv_list_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:minHeight="40dp"
android:minWidth="120dp"
android:textSize="20sp"
/>
</LinearLayout>

list_item_popupwindow.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="wrap_content"
android:orientation="vertical"
android:background="#d93c58b3"
>" <ListView
android:id="@+id/lv_popup_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:listSelector="#00000000"
android:focusableInTouchMode="true"
android:background="#d42a2a"
/> </LinearLayout>

task_detail_popupwindow.xml

package com.ceshi.popupwindow;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.SimpleAdapter;
import android.widget.Toast; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class MainActivity extends Activity { private ImageButton ibOperationMore;
private Button ibOperationMore2; List<Map<String, String>> moreList;
private PopupWindow pwMyPopWindow;// popupwindow
private ListView lvPopupList;// popupwindow中的ListView
private int NUM_OF_VISIBLE_LIST_ROWS = 3;// 指定popupwindow中Item的数量 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); iniData(); iniPopupWindow(); // 更多操作按钮
ibOperationMore = (ImageButton) findViewById(R.id.ib_operate_more);
//ibOperationMore2是用来测试焦点问题 这样popupwindow显示的时候其他的控件是不能点击的
//换句话说其它控件点击时没反应
ibOperationMore2 = (Button) findViewById(R.id.ib_operate_more2);
ibOperationMore2.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"cao",Toast.LENGTH_SHORT).show();
} }); ibOperationMore.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) { if (pwMyPopWindow.isShowing()) {
pwMyPopWindow.dismiss();// 关闭
} else {
pwMyPopWindow.showAsDropDown(ibOperationMore);// 显示
backgroundAlpha(0.7f);
} }
});
} private void iniData() { moreList = new ArrayList<Map<String, String>>();
Map<String, String> map;
map = new HashMap<String, String>();
map.put("share_key", "复制");
moreList.add(map);
map = new HashMap<String, String>();
map.put("share_key", "删除");
moreList.add(map);
map = new HashMap<String, String>();
map.put("share_key", "修改");
moreList.add(map);
} private void iniPopupWindow() { LayoutInflater inflater = (LayoutInflater) this
.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.task_detail_popupwindow, null);
lvPopupList = (ListView) layout.findViewById(R.id.lv_popup_list);
pwMyPopWindow = new PopupWindow(layout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
pwMyPopWindow.setFocusable(true);// 加上这个popupwindow中的ListView才可以接收点击事件 lvPopupList.setAdapter(new SimpleAdapter(MainActivity.this, moreList,
R.layout.list_item_popupwindow, new String[] { "share_key" },
new int[] { R.id.tv_list_item }));
lvPopupList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
pwMyPopWindow.dismiss();
Toast.makeText(MainActivity.this,
moreList.get(position).get("share_key"),
Toast.LENGTH_LONG).show();
}
}); // 控制popupwindow的宽度和高度自适应
/*lvPopupList.measure(View.MeasureSpec.UNSPECIFIED,
View.MeasureSpec.UNSPECIFIED);
pwMyPopWindow.setWidth(lvPopupList.getMeasuredWidth());
pwMyPopWindow.setHeight((lvPopupList.getMeasuredHeight() + 20)
* NUM_OF_VISIBLE_LIST_ROWS);*/ // 控制popupwindow点击屏幕其他地方消失
pwMyPopWindow.setBackgroundDrawable(this.getResources().getDrawable(
R.mipmap.ic_launcher));// 设置背景图片,不能在布局中设置,要通过代码来设置
pwMyPopWindow.setOutsideTouchable(true);// 触摸popupwindow外部,popupwindow消失。这个要求你的popupwindow要有背景图片才可以成功,如上
pwMyPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
//popupwindow消失的时候恢复成原来的透明度
backgroundAlpha(1f);
}
}); } /**
* 设置添加屏幕的背景透明度
* @param bgAlpha
*/
public void backgroundAlpha(float bgAlpha)
{
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
getWindow().setAttributes(lp);
}
}

MainActivity

效果图



严禁盗版    

转载请注明出处:https://www.cnblogs.com/bimingcong/p/4982237.html

 

弹出PopupWindow背景变暗的实现的更多相关文章

  1. 简单 JS 弹出层 背景变暗

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. PopupWindow 弹出时背景变暗

    下面的PopupWindow  的高是相对于屏幕高设计,宽是获取的某一个控件的宽设置,位置位于某控件的上方,红色部分是设置弹出时屏幕变暗的. //设置contentView View contentV ...

  3. 弹出popwindow 背景变暗

    先看下效果图吧 代码如下 package com.example.administrator.popwindowdemo.view; import android.app.Activity; impo ...

  4. 仿QQ空间根据位置弹出PopupWindow显示更多操作效果

    我们打开QQ空间的时候有个箭头按钮点击之后弹出PopupWindow会根据位置的变化显示在箭头的上方还是下方,比普通的PopupWindow弹在屏幕中间显示好看的多. 先看QQ空间效果图:       ...

  5. 仿iOS底部弹出popUpWindow

    上面为弹出来的效果 popUpWindow布局: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  6. Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow

    这是一张QQ空间说说详情的截图. 分析: .点击右上角三个点的图标,在界面底部弹出一个区域,这个区域有一些按钮提供给我们操作 .当该区域出现的时候,详情界面便灰了,也说成透明度变化了 .当任意选了一个 ...

  7. (转载)Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow

    Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow   这是一张QQ空间说说详情的截图. 分析: 1.点击右上角三个点的图标,在界面底部弹出一个区域,这个 ...

  8. PopupWindow-----点击弹出 PopupWindow 初始化菜单

    /** * 点击弹出 PopupWindow 初始化菜单 */ private void initPopupWindow() { PopupWindowAdapter adapter = new Po ...

  9. PopupWindowFromBottom 从底部弹出popupwindow

    自定义PopupWindowFromBottom public class PopupWindowFromBottom extends PopupWindow { public PopupWindow ...

随机推荐

  1. Spring Cloud限流详解

    转自:https://blog.csdn.net/tracy38/article/details/78685707 在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud ...

  2. Java IO流学习总结七:Commons IO 2.5-FileUtils

    在上面的几篇文章中,介绍了IO的常规用法,今天介绍 Commons IO 框架的使用. Commons IO简介 Apache Commons IO是Apache基金会创建并维护的Java函数库.它提 ...

  3. 【357】sorted 函数高级用法

    参考:Python 内置函数sorted()在高级用法 - Brad1994 - 博客园 sorted 函数主要实现的就是对于可迭代对象进行排序,对于一维数据排序很好理解与实现,直接调用即可,本文主要 ...

  4. LeetCode OJ 79. Word Search

    题目 Given a 2D board and a word, find if the word exists in the grid. The word can be constructed fro ...

  5. numpy-帮助文档 & 速查表.md

    目录 转相关资料: 速查表 速查代码 转相关资料: 官方手册 易佰教程 gitbook ZMonster's Blog 速查表 速查代码 # -*- coding: utf-8 -*- "& ...

  6. 解决idea控制台乱码及项目乱码

    如果控制台出现乱码,解决办法: 第1方案:.找到安装idea的路径下找idea文件下的bin中vmoptions文件,打开该文件,加上-Dfile.encoding=UTF-8 第二方案: 第3种方案 ...

  7. Java计算计算活了多少天

    Java计算计算活了多少天 思路: 1.输入你的出现日期: 2.利用日期转换,将字符串转换成date类型 3.然后将date时间换成毫秒时间 4.然后获取当前毫秒时间: 5.最后计算出来到这个时间多少 ...

  8. unity中Android环境变量配置

    http://www.cnblogs.com/windytrees/p/7533477.html

  9. 【C++】Mandelbrot集绘制(生成ppm文件)

    曼德勃罗特集是人类有史以来做出的最奇异,最瑰丽的几何图形.曾被称为"上帝的指纹". 这个点集均出自公式:Zn+1=(Zn)^2+C.(此处Z.C均为复数)所有使得该公式无限迭代后的 ...

  10. extJS 动态引用加载(转)

    ExtJs有庞大的类型库,很多类可能在当前的页面根本不会用到,我们可以引入动态加载的概念来即用即取.这些代码都要写在Ext.onReady外面. 1.动态引用外部Js //加载配置可用 Ext.Loa ...