Android WindowManager
来源:互联网 发布:淘宝在线客服工作时间 编辑:程序博客网 时间:2024/06/05 09:47
WindowManager 的简单使用
通过WindowManager添加一个Button,此Button显示在窗口的最上层
如果要在系统层面显示,需要添加权限
<!-- 显示顶层浮窗 --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
LayoutParams关键参数设置
Format : 一般设置为 PixelFormat.TRANSPARENT
,即透明,否则会为黑色
Type: View 显示的类型,分为三种层面 1.APP层 2.系统层 3.子Window层
使用系统层时,需要添加权限
这个Demo中使用的是系统层 params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
Flag: 设置Flag表示是否接收事件. FLAG_NOT_FOCUSABLE
表示Window不需获取焦点,也不需接收各种输入事件
FLAG_NOT_TOUCH_MODEL
表示会将当前View以外的事件传递给底层View
FLAG_SHOW_WHEN_LOCKED
显示在锁屏上.
窗体的大小和位置通过WindowManager.LayoutParams来设置,在通过x和y值来设置窗体位置时,需要注意gravity属性,如果gravity没有设置或者是center之类的,那么设置的x和y值就不会起作用,具体的说明见
View的大小设置为Match_Patent时,对应的X,Y值就会不起作用
X position for this window. With the default gravity it is ignored. When using LEFT or START or RIGHT or END it provides an offset from the given edge.
Y position for this window. With the default gravity it is ignored. When using TOP or BOTTOM it provides an offset from the given edge.
public class MainActivity extends AppCompatActivity { private static final String TAG = "Logger"; private WindowManager mManager; private Button mBtnFloat; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtnFloat = new Button(this); mBtnFloat.setText("Floating"); mManager = (WindowManager) getSystemService(WINDOW_SERVICE); // 获取LayoutParams参数 final WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT , WindowManager.LayoutParams.WRAP_CONTENT, 0, 0, PixelFormat.TRANSPARENT); // 设置Flag params.x = 200; params.y = 200; params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; // 设置Type , 决定View显示的层级 params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; // 添加在系统上 params.gravity = Gravity.START | Gravity.TOP; mManager.addView(mBtnFloat, params); // 设置触摸监听器 mBtnFloat.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { Log.d(TAG, "onTouch"); switch (motionEvent.getAction()) { case MotionEvent.ACTION_MOVE: Log.d(TAG, "onTouch: ActionDown"); params.x = (int) motionEvent.getRawX(); params.y = (int) motionEvent.getRawY(); // 重新更新Window上的View mManager.updateViewLayout(mBtnFloat, params); break; default: break; } return false; } }); }}
- android windowManager
- android windowManager
- Android--WindowManager
- Android--WindowManager
- Android----WindowManager
- Android----------WindowManager
- Android-WindowManager
- Android WindowManager
- Android WindowManager
- android WindowManager
- Android中 Window 、WindowManager、WindowManager.LayoutParams 相关内容
- Android解析WindowManager(一)WindowManager体系
- Android平台WindowManager运用
- Android平台之WindowManager
- android学习---- WindowManager.LayoutParams
- android学习---- WindowManager.LayoutParams
- Android平台WindowManager
- Android系统服务-WindowManager
- 51的串口功能函数
- 期望——计算机里的英语,第一语言
- 洛谷10月月赛Round.1 A.丝绸之路
- 1118. Birds in Forest (25) 并查集
- Well Designed Sites
- Android WindowManager
- JavaScript数据的基本类型
- C/C++中的作用域种类
- Linux shell 常用命令
- 1119. Pre- and Post-order Traversals (30) 二叉树
- JDBC--数据库管理系统
- sqoop的简单实用
- Eclipse从SVN资源库中更新项目文件
- Java Servlet实现的三种方式