Подтвердить что ты не робот

Почему мое меню редактирования/вставки EditText находится под EditText? Как изменить всплывающее окно z-порядка?

Примечание

Если кто-то знает, как порядок (z-порядок) Windows добавлен через windowmanager, я также буду принимать ответ, потому что он ответит на все вопросы. На самом деле я только нахожу, чтобы сделать windowManager.removeView(MyView) следующим образом windowManager.addView(MyView), чтобы поставить представление перед другим, но это не идеально, потому что он визуально удаляет и добавляет представление. это выглядит сумасшедшим, что их нет встроенной функции в android, чтобы сделать такое простое мышление.


Я создаю представление (linearlayout), которое содержит EditText. Я добавляю это представление в действие через WindowManager.addView(view, Layout_Params);

но у меня проблема с тем, что каждое всплывающее окно edittext будет генерироваться (например, меню "Копировать/Пропустить" или "Меню предложения слов" ) будет под другими представлениями даже при их собственном представлении EditText (а не на изображении, на котором у edittext есть прозрачный фон)/p >

также немного странно, всплывающее окно генерируется последним EditText w ill be

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

i создаю представления (то есть: 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;
}

и я показываю представление (которое содержит только edittext) следующим образом:

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

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

так, как сделать всплывающее окно, связанное с editText перед всем?

Этот вопрос также может помочь немного (о z-порядке окна): Как работает z-порядок просмотра (т.е. окно), добавленный через WindowManager?

4b9b3361

Ответ 1

Ожидается, что если вы увидите документацию DecorView, она даст вам фон текущего вида.

Что вы делаете, так это запуск панели действий в стиле decorview, и, следовательно, ее выход в фоновом режиме. Прочтите эту статью для более подробной информации http://www.curious-creature.com/2009/03/04/speed-up-your-android-ui/

Чтобы решить эту проблему, вам нужно получить текущее представление, для которого вы можете использовать Просмотр focusView = (Просмотр) yourParentView.getFocusedChild();

Ответ 2

Это может помочь вам, попробуйте.

Ключевой ответ 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" >

Ответ 3

Попробуйте WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

вместо WindowManager.LayoutParams.TYPE_APPLICATION;

Ответ 4

На самом деле нет способа заказать (z-order) окна, добавленные через windowmanager. Единственный способ - удалить окно и снова добавить его.