WindowManager(窗口管理服务)

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!

悠然享受和大自然融合之乐。

WindowManager(窗口管理服务)

相关文章:

你感兴趣的文章:

标签云: