Получение списка всех Windows на Android

Можно ли получить список всех Windows в приложении для Android?

Если нет, возможно ли получать уведомления о создании нового Вид или Окно?

Приветствия:)

Например: я хотел бы знать, есть ли видимое представление клавиатуры на экране или если на экране есть диалоговое окно предупреждения. Это возможно? Могу ли я получить экземпляр View или Window, удерживающий его?

Ответ 1

Да, это возможно несколькими способами. Все представления, отображаемые на экране, добавляются в ViewGroup, которые обычно представляют собой макеты, такие как R.layout.main, LinearLayout, RelativeLayout и т.д.

Вы можете получить доступ к представлениям во время выполнения, после того, как макеты были созданы, используя обработчик, такой как onWindowFocusChanged:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    int count = myLayout.getChildCount();
    for(int i = 0; i < count; i++)
    {
    View v = myLayout.getChildAt(i);
    ...
    }
}

Вы можете просто настроить поток внутри onWindowFocusChanged, который уведомит вас, если будет создана клавиатура, постоянно проверяя количество просмотров детьми текущего макета.

Ответ 2

Вы можете получать только те виды, которыми управляет ваше приложение.

Это включает в себя все виды кроме статусных и навигационных баров (выше HoneyComb). Если вы решите создать свой собственный InputMethod, это представление может быть вашим, но вам нужно будет зарегистрировать правильные виды клавиатуры. Более подробно об этом см. этот.

В противном случае, если вы хотите получить все виды в своем окне:

ViewGroup decor = (ViewGroup)activity.getWindow().getDecorView();
int count = decor.getChildCount();
for(int i = 0; i < count; i++) {
    View view = decor.getChildAt(i); //voila
}

Ответ 3

hey использовать этот код, это поможет вам найти, если в вашей деятельности создан какой-либо диалог.

class MyActivity extends Activity {

@Override
    public void onAttachedToWindow() {

        super.onAttachedToWindow();

        Log.d("TAG", "New Window ATTACHED");
    }

}

onAttachedToWindow будет вызываться каждый раз, когда пользователь создает новый диалог или что-то

Ответ 4

Для проблемы с клавиатурой вы можете использовать свой собственный экземпляр для просмотра клавиатуры с KeyboardView в своем макете: http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html

Используйте тот же принцип для других видов, которые вы хотите обработать: управляйте ими самостоятельно в своем макете. Я не знаю, можете ли вы в программном обеспечении, которое вы планируете делать, но это способ, который может работать.