Как предотвратить появление софт-клавиатуры в моей активности? - PullRequest
6 голосов
/ 13 января 2011

Я пишу игру для Android, которая работает в полноэкранном ландшафтном режиме и имеет кнопки, расположенные внизу слева и справа внизу окна.Проблема в том, что одна из этих кнопок (на многих телефонах) находится прямо рядом с кнопкой «Меню», поэтому игрок может случайно нажать «Меню».

При кратковременном нажатии я просто приостанавливаю игру и показываювнутриигровое меню.Никаких проблем.

Но если удерживать кнопку нажатой, Android откроет программную клавиатуру в нижней половине экрана.Поскольку это мешает и совершенно бесполезно в этом упражнении, я бы хотел его отключить.

Я попробовал следующие подходы.

Через InputMethodManager

From: Скрыть программную клавиатуру при работе без каких-либо операций с клавиатурой

Так как у меня есть только один вид (a GLSurfaceView), я попробовал это в своем Activity.onCreate():

InputMethodManager imm = ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE));
imm.hideSoftInputFromInputMethod(glSurfaceView.getApplicationWindowToken(), 0);

Не работает: программная клавиатура по-прежнему отображается в меню при длительном нажатии.

Через AndroidManifest.xml

От: Как отключить программную клавиатуру Androidподходя ко всему моему заявлению

Я добавил это в свой манифест:

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

Также много чего не делает.

Итак ...есть ли способ?Как?

Ответы [ 4 ]

12 голосов
/ 13 января 2011

Вот, по крайней мере, решение моей непосредственной проблемы.Он показывает игровое меню, независимо от того, как долго была нажата кнопка.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    // From the docs:
    // "Note that in order to receive this callback, someone in the event [chain]
    // must return true from onKeyDown(int, KeyEvent) and call startTracking() on the event."
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        // Override default handling, and don't pop up the soft keyboard.
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        openOptionsMenu();
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

Но это похоже на взлом, поэтому я надеюсь, что кто-то придумает лучшее решение.

3 голосов
/ 13 января 2011

Но если удерживать кнопку нажатой, Android откроет программную клавиатуру в нижней половине экрана.

Какой у вас телефон?Уверены ли вы?Я никогда не видел, чтобы это случилось, и я просто попробовал, и это не работает на моем телефоне.

Кроме того, это звучит как проблема пользователя.Не пытайтесь подорвать пользователя.Если пользователь ДЕЙСТВИТЕЛЬНО хочет открыть клавиатуру в вашем приложении, вы должны позволить им, и если это бесполезно, они нанесут ответный удар, и он уйдет.близко к кнопкам меню.

0 голосов
/ 16 ноября 2011

использовать android: windowSoftInputMode = "AdjustPan" в манифесте Android. Я думаю, что это лучший выбор, чтобы предотвратить повышение зрения.

0 голосов
/ 13 января 2011

Попробуйте использовать hideSoftInputFromWindow () .Согласно документации:

запрос на скрытие окна мягкого ввода из контекста окна, которое в данный момент принимает ввод.

...