WindowManager的一些属性

WindowManager(窗口管理服务),它是显示View的最底层,Toast,Activity,Dialog的底层都有用到了这个WindowManager。WindowManager里面主要是addView,removeView,updateViewLayout这几个方法来显示View,以及通过WindowManager.LayoutParams这个API来设置相关的属性。下文讲详细介绍。

WindowsManager

1、WindowsManager使用方法

1

//获取WindowManager对象
WindowManager wManager = getApplicationContext().getSystemService(Context.WINDOW_ SERVICE);
//获得WindowManager.LayoutParams对象,为后续操作作准备
WindowManager.LayoutParams wmParams=new WindowManager.LayoutParams();
//...WindowManager.LayoutParams一顿设置
wManager.addView(textView, wmParams);

2

public class MainActivity extends AppCompatActivity {
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);

        Button floatingButton = new Button(this);
        floatingButton.setText("button");
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                0, 0,
                PixelFormat.TRANSPARENT
        );
        // flag 设置 Window 属性
        layoutParams.flags= WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
        // type 设置 Window 类别(层级)
        layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
        layoutParams.gravity = Gravity.CENTER;
        WindowManager windowManager = getWindowManager();
        windowManager.addView(floatingButton, layoutParams);
    }
}

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

3全屏设置

protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        //去除标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //去除状态栏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);//要放到加载布局文件代码之前
        initView();
        initData();
        initListener();
}

2、WindowManager的关联类

2.1、 WindowManager

先来看看WindowManager里面有什么。
Android_8_0_r36_\frameworks\base\core\java\android\view\WindowManager.java

public interface WindowManager extends ViewManager {
   

    int DOCKED_INVALID = -1;
    int DOCKED_LEFT = 1;
    int DOCKED_TOP = 2;
    int DOCKED_RIGHT = 3;
    int DOCKED_BOTTOM = 4;
    final static String INPUT_CONSUMER_PIP = "pip_input_consumer";
    final static String INPUT_CONSUMER_NAVIGATION = "nav_input_consumer";
    final static String INPUT_CONSUMER_WALLPAPER = "wallpaper_input_consumer";
 
    public static class BadTokenException extends RuntimeException {
   
        public BadTokenException() {
   }
        public BadTokenException(String name) {
    super(name);}
    }
        
    public static class InvalidDisplayException extends RuntimeException {
   
        public InvalidDisplayException() {
   }
        public InvalidDisplayException(String name) {
    super(name);}
    }

    public Display getDefaultDisplay();
    public void removeViewImmediate(View view);
    public interface KeyboardShortcutsReceiver {
   
        void onKeyboardShortcutsReceived(List<KeyboardShortcutGroup> result);
    }

    final int TAKE_SCREENSHOT_FULLSCREEN = 1;
    final int TAKE_SCREENSHOT_SELECTED_REGION = 2;
    public static final String PARCEL_KEY_SHORTCUTS_ARRAY = "shortcuts_array";

    public void requestAppKeyboardShortcuts(final KeyboardShortcutsReceiver receiver, int deviceId);

	public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable {
   
	......
	}
	......
    
 }

WindowManager是一个接口,继承ViewManager。里面有一些实例属性和方法,还有一个LayoutParams占据着很大一部分。LayoutParams是一个序列化类。而且WindowManager里面的大部分都是隐藏的属性和方法,只给系统调用。

2.2、ViewManager

WindowManager继承ViewManager。ViewManager里面实际上只有三个方法:addViewupdateViewLayoutremoveView,分别对应着添加view、更新viewlayout、移走view。

\frameworks\base\core\java\android\view\ViewManager.java

package android.view;
public interface ViewManager
{
   
    public void addView(View view, ViewGroup.LayoutParams params);
    public void updateViewLayout(View view, ViewGroup.LayoutParams params);
    public void removeView(View view);
}

2.3、WindowManagerImpl

那么WindowManager的实现类是哪个?是WindowMan

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值