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

时间:2016-09-18 18:23:32

标签: android android-layout android-edittext android-view android-windowmanager

注意

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

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

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

also something a little strange, the popup generate by the last EditText w生病

enter image description here

enter image description here

enter image description here

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

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

    WindowManager.LayoutParams lp = createLayoutParams();
    mWindowManager.addView(view, lp);

我显示视图(其中只包含一个edittext),如下所示:

$http({
  url: "/db?table=appointments&type=perDoctor",
  method: "POST"
}).then(...);

那么如何让弹出窗口连接到editText前面的所有内容?

这个问题也可能有所帮助(关于窗口视图的z顺序):How work the z-order of view (ie: window) added via WindowManager?

4 个答案:

答案 0 :(得分:3)

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

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

要解决此问题,您需要获取可能使用的当前视图 查看focusedView =(查看)yourParentView.getFocusedChild();

答案 1 :(得分:3)

它可以帮到你,尝试一下。

关键答案是android:windowActionModeOverlay

res / style.xml中的

定义了一个新主题扩展了你的原始主题:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Black.NoTitleBar.ActionModeOverlay"
  parent="android:Theme.Black.NoTitleBar">
    <item name="android:windowActionModeOverlay">true</item>
  </style>
</resources>

或者只在主题中添加一行true,如果已经定义了一行。

让您的活动使用AndroidManifest.xml中定义的主题:

<activity
    android:name="you.AppActivity"
    android:theme="@style/ActionModeOverlay" >

答案 2 :(得分:0)

尝试WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

而不是WindowManager.LayoutParams.TYPE_APPLICATION;

答案 3 :(得分:0)

他们实际上无法通过windowmanager添加订单(z-order)窗口。唯一的方法是删除窗口并再次添加。