WindowManager创建悬浮窗的简单例子
来源:互联网 发布:把linux安装到移动硬盘 编辑:程序博客网 时间:2024/05/17 07:14
package com.example.happycodinggirl.testwindowmanager;import android.content.Context;import android.support.v7.app.ActionBarActivity;import android.os.Bundle;import android.util.Log;import android.view.Display;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.WindowManager;import android.widget.Button;public class MainActivity extends ActionBarActivity { private WindowManager windowManager; private View floatview; private WindowManager floatWindowManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button= (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (floatWindowManager==null){ createFloatView(); } } }); } public void createFloatView(){ floatview =LayoutInflater.from(this).inflate(R.layout.floatlayout,null); mearsureView(floatview); // windowManager =getWindowManager(); // Log.v("TAG","-----activity windowManager---"+ windowManager); floatWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Log.v("TAG","----floatWindowManager is---"+ floatWindowManager); Display display= floatWindowManager.getDefaultDisplay(); int width=display.getWidth(); int height=display.getHeight(); WindowManager.LayoutParams layoutParams=new WindowManager.LayoutParams(); layoutParams.type= WindowManager.LayoutParams.TYPE_PHONE; layoutParams.flags= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; layoutParams.gravity= Gravity.LEFT|Gravity.TOP; layoutParams.x=width/2- floatview.getMeasuredWidth()/2; layoutParams.y=height/2- floatview.getMeasuredHeight()/2; layoutParams.width=floatview.getMeasuredWidth(); layoutParams.height=floatview.getMeasuredHeight(); floatWindowManager.addView(floatview, layoutParams); } public void mearsureView(View view){ int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); view.measure(w, h); } @Override protected void onDestroy() { super.onDestroy(); if (floatWindowManager!=null){ floatWindowManager.removeView(floatview); } }}
每一个WindowManager都绑定一个Display.你可以通过createDisplayContext(Display)来得到一个这个Display
所属于的Context上下文,然后使用这个上下文context.getSystemService(Context.WINDOW_SERVICE)
来获得一个WindowManager.该功能还未试过,以后尝试下。
gravity属性指的不是view的位置,而是基准点的位置。比如上面代码为
LEFT和TOP,则就是以左上为基准,layoutParams.x,y分别是偏移
该基准位置的距离。所以上面代码展示出来的效果是局屏幕中间显示的
一个view.
另外,activity有个getWindowManager的方法返回一个WindowManager,
为了展示自定义的Windows使用。测试了下换为activity下的windowManager,
发现背景都变为黑色的了。还未深入研究,以后再继续深挖。
完整代码地址
0 0
- WindowManager创建悬浮窗的简单例子
- WindowManager创建创建悬浮窗
- Windowmanager悬浮窗的 WindowManager.LayoutParams.type 属性属性研究
- windowmanager 悬浮窗效果
- WindowManager实现悬浮窗
- Android WindowManager悬浮窗
- WindowManager悬浮窗TYPE_TOAST
- WindowManager添加悬浮窗
- 使用WindowManager创建可拖动的悬浮按钮
- 创建简单的悬浮按钮
- 使用WindowManager实现悬浮窗
- 利用WindowManager实现悬浮窗
- WindowManager 系统悬浮窗弹出
- 使用WindowManager实现悬浮窗
- WindowManager 实现悬浮窗 详解
- WindowManager对于窗口的管理以及悬浮窗的实现
- 自己制作悬浮窗——WindowManager的使用
- WindowManager中悬浮窗的返回键事件处理
- 指向指针数组的数组指针
- 悬浮小火箭 (类似腾讯手机卫士)
- 南宁肛门很痒是怎么回事
- 斐波那契数列的各种算法实现
- android中MVP模式
- WindowManager创建悬浮窗的简单例子
- 南宁肛门旁边长了个疙瘩
- 南宁肛门坠胀是怎么回事
- sizeof和strlen的区别 黑马程序猿
- 南宁肛门外翻是怎么回事
- datatables API
- 143Reorder List
- 南宁屁眼长了个疙瘩很痛
- 南宁肛门长了个疙瘩很痛