Получение списка всех 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
Используйте тот же принцип для других видов, которые вы хотите обработать: управляйте ими самостоятельно в своем макете. Я не знаю, можете ли вы в программном обеспечении, которое вы планируете делать, но это способ, который может работать.