如何将WindowManager内容放在导航栏

时间:2017-08-24 11:31:55

标签: android android-windowmanager

我正在开发一款看起来像Facebook Messenger聊天头的Android应用。有一个视图高于所有其他应用程序。您可以按下它并将其拖动到屏幕上的任何位置。

到目前为止它运作良好,我只有一个问题:当用户将其部分拖到屏幕外时,我希望我的视图位于底部导航栏下方。现在,视图始终位于导航栏上方。

以下是我设置此视图的方式:

View myView = LayoutInflater.from(this).inflate(R.layout.my_view, null);
myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
int screenHeight = Utils.getScreenHeight(this);

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

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_LAYOUT_ATTACHED_IN_DECOR
                    | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
                    | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
            PixelFormat.TRANSLUCENT);

params.gravity = Gravity.TOP | Gravity.RIGHT;

windowManager.addView(myView, params);

在论坛上,我只能看到有人抱怨这个事实,他们的观点落在导航栏后面,而他们希望它超越,所以我有点以为我在这里做了一些非常错误的事情。 / p>

1 个答案:

答案 0 :(得分:0)

您当然不应该使用FLAG_LAYOUT_ATTACHED_IN_DECOR。不过不了解FLAG_LAYOUT_NO_LIMITS。如果没有第一个标志,则弹出菜单中会出现弹出框,并且在主题中带有windowDrawsSystemBarBackgrounds=true

也可以轻松进行测试,将高度设置为match_parent