PopupWindow z ordering
Я играю с меню, используя PopupWindow, которые перекрывают EditText.
Он отлично работает, за исключением того, что мой PopupWindow перекрывается некоторыми элементами из системы EditText IME (отметки выбора, кнопка Вставить).
Мой вопрос: как заставить z-порядок моего PopupWindow так, чтобы он отображался над этими украшениями?
Вот образ того, что происходит. Мне нужно, чтобы мой PopupWindow (меню) был нарисован поверх всего, поэтому каким-то образом скажите WindowManager, как заказать окна.
Спасибо.
![enter image description here]()
Ответы
Ответ 1
Нашел anwer сам.
Эти декорации являются нормальными PopupWindow-s, управляемыми EditText.
Z-порядок любого окна определяется WindowManager.LayoutParams.type, на самом деле он определяет цель Window. Допустимые диапазоны: FIRST_SUB_WINDOW - LAST_SUB_WINDOW для всплывающего окна.
Приложение обычно не может изменять "тип" PopupWindow, за исключением вызова скрытой функции PopupWindow.setWindowLayoutType(int) с использованием отражения Java, и установка желаемого типа окна.
Результат:
![enter image description here]()
EDIT:
Код, который делает это:
Method[] methods = PopupWindow.class.getMethods();
for(Method m: methods){
if(m.getName().equals("setWindowLayoutType")) {
try{
m.invoke(getPopupWindow(), WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL);
}catch(Exception e){
e.printStackTrace();
}
break;
}
}
Ответ 2
public void compatibleSetWindowLayoutType(int layoutType) {
if (Build.VERSION.SDK_INT >= 23) {
setWindowLayoutType(layoutType);
} else {
try {
Class c = this.getClass();
Method m = c.getMethod("setWindowLayoutType", Integer.TYPE);
if(m != null) {
m.invoke(this, layoutType);
}
} catch (Exception e) {
}
}
}
Ответ 3
import android.support.v4.widget.PopupWindowCompat;
PopupWindowCompat.setWindowLayoutType(popupWindow, WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL);