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

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

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

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

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

Через InputMethodManager

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

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

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

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

Через AndroidManifest.xml

Из:Как предотвратить появление софт-клавиатуры Android во всем моем приложении

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

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

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

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

Ответы на вопрос(4)

hideSoftInputFromWindow () вместо. Согласно документации:

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

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

@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);
}

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

 Carl Manaster28 июл. 2011 г., 23:32
Я согласен, что это хак, но это хак, который прекрасно работает. Большое спасибо; это как раз то, что мне было нужно (ни один из других подходов для меня не сработал).
 bytebender19 апр. 2011 г., 18:14
Я за нестандартный подход, и все, но иногда вы просто хотите, чтобы это делало определенную вещь, и ваш код помогает достичь именно этого. Я не знаю, назову ли я это хаком, возможно, так оно и есть, потому что вам нужно просто пройтись по обручам, чтобы заставить его работать ... Спасибо!
Решение Вопроса

Android открывает программную клавиатуру в нижней половине экрана.

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

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

Еще более важным вопросом должно быть то, что ваши кнопки расположены так близко к кнопкам меню.

 Thomas14 янв. 2011 г., 15:12
Android 2.2 кстати.
 Error 45431 янв. 2011 г., 19:59
Я думаю, что есть случаи, когда вы хотите запретить пользователю открывать клавиатуру в вашем приложении. Приложение камеры, показывающее кадры предварительного просмотра, является одним из примеров. DroidX открывает программную клавиатуру по умолчанию при длительном нажатии меню.
 Thomas14 янв. 2011 г., 21:12
Не лично я, но тот, кто никогда не использовал N1 ​​раньше. Может быть, это не такая большая проблема, как я изначально думал.
 Thomas14 янв. 2011 г., 15:06
Хороший нестандартный ответ, спасибо. Телефон Nexus One. Мои кнопки обязательно должны быть близко к краям экрана, чтобы сохранить как можно больше возможностей экрана для реальных действий. Тот факт, что «аппаратные» кнопки являются не более чем расширением сенсорного экрана, без ощутимой границы, можно считать недостатком дизайна телефона ... но я не думаю, что N1 - единственный телефон с таким дизайн.
 Falmarri14 янв. 2011 г., 19:20
@Thomas: На самом деле есть программное обеспечение для предотвращения случайных нажатий кнопок меню. У вас был этот вопрос лично? Я почти никогда случайно не нажимал на кнопки меню. На оригинальном мото дроиде.

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

Ваш ответ на вопрос