我需要一个视图显示在我的应用程序的顶部,当它被显示时,它可以一直显示在我的应用程序的所有其他视图(所有片段和活动)的顶部。听起来像是一个浮动的操作按钮,但总是显示在我的应用程序的顶部。
我知道我可以通过在手机的窗口管理器中添加视图来完成,在我退出应用程序时隐藏视图,在我恢复应用程序时再次显示视图。这种棘手的方法可以工作,但它也需要一些额外的许可,这是我试图避免的。
如果我只想在我的应用程序中显示,我可以实现它而不需要额外的用户许可?如果答案是肯定的,那怎么办?这个键看起来像视图的layoutparams,我试过了,但失败了。
如果答案能显示一些详细的代码和解释就好了。

最佳答案

为此,您必须使用WindowManager
首先在清单中添加权限

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

添加要显示的图像。
chatheadImg = (ImageView)chatheadView.findViewById(R.id.chathead_img);

然后创建服务并将窗口管理器添加到其中。
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            PixelFormat.TRANSLUCENT);
    params.gravity = Gravity.TOP | Gravity.LEFT;
    params.x = 0;
    params.y = 100;

只需在视图上注册触摸事件
chatheadView.setOnTouchListener(new View.OnTouchListener() {
@Override
        public boolean onTouch(View v, MotionEvent event) {
        Switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:

                      //To do
                    break;
                case MotionEvent.ACTION_MOVE:

                break;

});

查看这些教程以获得更好的理解
http://www.androidhive.info/2016/11/android-floating-widget-like-facebook-chat-head/
https://github.com/henrychuangtw/Android-ChatHead

10-07 20:59