Android提供的系统服务之–WindowManager(窗口管理服务)
——转载请注明出处:coder-pig
本节引言:
本节我们来探讨下这个Android系统服务中的WindowManager(窗口管理服务),
他是显示View的最底层,好像我们的Actviity和Dialog,以及Toast的底层实现都用到
这个WindowManager,他是全局的!核心其实就是WindowManager调用addView,
removeView,updateViewLayout这几个方法来显示View;还有WindowManager.LayoutParams
这个API来设置相关的属性!本节我们就写两个关于WindowManger的实用例子吧:
分别是获取屏幕宽高,以及弄一个Android的悬浮框!还有保持屏幕的常亮以及全屏设置
好了,开始本节内容!
本节正文:
1.相关概念图:
2.使用例子:①获取手机屏幕宽高:
我们通过调用getDefaultDisplay( )可以获得默认的Display显示对象,接着调用getWidth( )
和getHeight( )即可获得屏幕宽高
代码如下:
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);setTitle(windowManager.getDefaultDisplay().getWidth() + "*" + windowManager.getDefaultDisplay().getHeight());运行截图:
②Android悬浮框的实现:
先来看下效果图吧,这里只是一个简单的按钮,大家可以按自己的需求来自定义~
后面还提供一个类似于QQ悬浮发射小火箭的demo,有需要的可以下载来自己研究研究~
实现流程解析:
step 1:我们需要一个后台的Service在后台等待我们的操作,比如完成,View的绘制,移除等~
我们先创建一个空的Service类:MyWindowService继承Service,然后我们需要在
AndroidManifest.xml为这个Service来进行注册!
<service android:name=".MyWindowService"/>另外还需要加上下述两个权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><uses-permission android:name="android.permission.GET_TASKS" />
step 2:在我们的MainActivity中设置两个按钮的点击事件,我们还要为intent写入
一个extra,根据这个值,我们在Service进行判断,是开启悬浮框,还是关闭悬浮框
package com.jay.example.windowmanagerdemo1;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {private Button btnShow;private Button btnClose;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnShow = (Button) findViewById(R.id.btnShow);btnClose = (Button) findViewById(R.id.btnClose);btnShow.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent show = new Intent(MainActivity.this, MyWindowService.class);show.putExtra(MyWindowService.OPERATION, MyWindowService.OPERATION_SHOW);startService(show);Toast.makeText(MainActivity.this,"悬浮框已开启~", Toast.LENGTH_SHORT).show();}});btnClose.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent hide = new Intent(MainActivity.this, MyWindowService.class);hide.putExtra(MyWindowService.OPERATION, MyWindowService.OPERATION_HIDE);startService(hide);Toast.makeText(MainActivity.this,"悬浮框已开启~", Toast.LENGTH_SHORT).show();}});}}
step 3:接下来就需要开始编写我们的Service类了,我们想想这个Service需要干嘛?
①肯定需要一个创建View的方法啦,于是乎,我们定义一个createWindowView( )方法用于创建
悬浮框的View!
悠然享受和大自然融合之乐。