注意
如果有人知道如何通过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>
我使用这些布局参数创建视图(即: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?
答案 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)窗口。唯一的方法是删除窗口并再次添加。