弹出PopupWindow背景变暗的实现
2015-11-20 20:03
537 查看
弹出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>
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
效果图
相关文章推荐
- cheng@Linux之基础--GPIO实验
- 编译器架构的王者LLVM——(10)变量的存储与读取
- nginx的操作指令
- 网站开发进阶(十六)错误提示:Multiple annotations found at this line:- basePath cannot be resolved to a variable
- 网站开发进阶(十六)错误提示:Multiple annotations found at this line:- basePath cannot be resolved to a variable
- 【Leetcode】Copy List with Random Pointer
- 网站开发进阶(十五)JS基础知识充电站
- 网站开发进阶(十五)JS基础知识充电站
- Yet Another Computer Vision Index To Datasets (YACVID)图像库索引网站
- OpenTSDB设计解读
- geopy使用详解
- 封装了opencv的旋转图像函数
- MAC下安装与配置nginx
- docker性能测试
- 网卡流量监控脚本
- Linux虚拟地址空间分布
- 网站开发进阶(十四)JS实现二维码生成
- 网站开发进阶(十四)JS实现二维码生成
- 架构探险——Android MVP模式浅析
- 网站开发进阶(十三)window.onload用法详解