为什么我的EditText复制/粘贴菜单位于EditText下?如何更改弹出窗口的z顺序?

lok*_*oki 15 android android-layout android-edittext android-view android-windowmanager

注意

如果有人知道如何订购(z-order)Windows通过windowmanager添加,我也会接受答案,因为它将回答所有问题.实际上我只是windowManager.removeView(MyView)立即通过windowManager.addView(MyView)将视图放在另一个视图之前进行跟踪,但这并不理想,因为它可视地删除并添加视图.它看起来很疯狂,他们在android中没有构建功能来做这么简单的思考.


我创建了一个包含EditText的视图(linearlayout).我通过WindowManager.addView(view,Layout_Params)在活动中添加此视图;

但我有问题,edittext将生成的每个弹出窗口(如复制/过去菜单或单词建议菜单)将在其他视图下,甚至在他们自己的EditText视图下(不在图片上,edittext具有透明背景)

也有点奇怪,弹出由最后一个EditText生成我将会

在此输入图像描述

在此输入图像描述

在此输入图像描述

我用这些布局参数创建视图(即:LinearLayout):

protected WindowManager.LayoutParams createLayoutParams() {
    WindowManager.LayoutParams p = new WindowManager.LayoutParams();
    p.gravity = Gravity.LEFT | Gravity.TOP;     
    p.width = 0;
    p.height = 0;                       
    p.format = PixelFormat.TRANSLUCENT;
    p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED;
    p.flags = NOT_FOCUSABLE_FLAGS;
    // TYPE_APPLICATION allows for popups in browser windows (like edit menus)
    p.type = WindowManager.LayoutParams.TYPE_APPLICATION; 
    p.token = null; 

    return p;
}
Run Code Online (Sandbox Code Playgroud)

我显示视图(谁只包含一个edittext)像这样:

    private final WindowManager mWindowManager;
    mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

    WindowManager.LayoutParams lp = createLayoutParams();
    mWindowManager.addView(view, lp);
Run Code Online (Sandbox Code Playgroud)

那么如何让弹出窗口连接到editText前面的一切?

这个问题也可能有点帮助(关于窗口视图的z顺序):如何通过WindowManager添加视图的z顺序(即:窗口)?

Ash*_*wat 3

这是预期的,如果您看到 DecorView 的文档,它会为您提供当前视图的背景。

您正在做的是在装饰视图上启动操作栏,因此它会进入后台。阅读这篇文章了解更多详细信息 http://www.curious-creature.com/2009/03/04/speed-up-your-android-ui/

要解决这个问题,您需要获取当前视图,为此您可以使用 View FocusedView = (View) yourParentView.getFocusedChild();