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 实例
-
获得 WindowManager 对象
WindowManager wManager = getApplicationContext().getSystemService(Context. WINDOW_ SERVICE);
-
获得 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;
我们写一个范例来演示下
-
创建一个 空的 Android 项目
cn.twle.android.ScreenSize
-
修改
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>
-
修改
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();
-
复用上面的范例
-
修改
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);