WindowManager 窗口管理服务

WindowManager (窗口管理服务) 是显示 View 的最底层,Toast,Activity,Dialog 的底层都用到了这个 WindowManager

WindowManager (窗口管理服务) 是全局的,通过调用 addView(),removeView(),updateViewLayout() 这几个方法来显示 View 以及通过 WindowManager.LayoutParams 这个 API 来设置相关的属性

WindowManager

WindowManager 是 Android 为我们提供的用于与窗口管理器进行交互的一个 API

我们都知道 App 的界面都是由一个个的 Acitivty 组成,而 Activity 又由 View 组成,当我们想显示一个界面的时候,第一时间想起的是 Activity,又或是 Dialog 和 Toast

但是有些情况下,前面这三者可能满足不了我们的需求,比如我们仅仅是一个简单的显示 用 Activity 显得有点多余了,而 Dialog 又需要 Context 对象,Toast 又不可以点击...

在这种情况下, WindowManager 就派上用场了,它可以添加 View 到屏幕上或者从屏幕上移除 View

WindowManager 就是管理 Android 窗口机制的一个接口,显示 View 的最底层

获得 WindowManager 实例

  1. 获得 WindowManager 对象

    WindowManager wManager = getApplicationContext().getSystemService(Context. WINDOW_ SERVICE);
    
  2. 获得 WindowManager.LayoutParams 对象,为后续操作做准备

    WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();
    

使用 WindowManager 获取屏幕宽高

获取当前设备的屏幕高宽可以使用下面的语句

WindowManager wm = (WindowManager) context.
getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;

我们写一个范例来演示下

  1. 创建一个 空的 Android 项目 cn.twle.android.ScreenSize

  2. 修改 activity_main.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="match_parent"
        android:gravity="center_horizontal" 
        android:orientation="vertical" >
    
        <TextView 
            android:id="@+id/ms_screen_size" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" />
    </LinearLayout>
    
  3. 修改 MainActivity.java

    package cn.twle.android.screensize;
    
    import android.content.Context;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.view.WindowManager;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            TextView ms_screen_size = (TextView)findViewById(R.id.ms_screen_size);
    
            WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            DisplayMetrics dm = new DisplayMetrics();
            wm.getDefaultDisplay().getMetrics(dm);
    
            ms_screen_size.setText("当前手机的屏幕宽高:" + dm.widthPixels + "x" + dm.heightPixels);
        }
    }
    

WindowManager 设置窗口全屏显示

WindowManager 设置窗口全屏显示就两行代码

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();

  1. 复用上面的范例

  2. 修改 activity_main.xml

    package cn.twle.android.screensize;
    
    import android.content.Context;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.DisplayMetrics;
    import android.view.WindowManager;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getSupportActionBar().hide();
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            TextView ms_screen_size = (TextView)findViewById(R.id.ms_screen_size);
    
            WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            DisplayMetrics dm = new DisplayMetrics();
            wm.getDefaultDisplay().getMetrics(dm);
    
            ms_screen_size.setText("当前手机的屏幕宽高:" + dm.widthPixels + "x" + dm.heightPixels);
        }
    }
    

WindowManager 保持屏幕常亮

保持屏幕一直高亮就一行代码

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

取消屏幕高亮

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

参考文档

  1. 官方 API 文档 : WindowManager

  2. 官方文档:WindowManager.LayoutParams

  3. Android系统服务-WindowManager

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.