6

フルスクリーンの横向きモードで実行され、ウィンドウの左下と右下にボタンが配置された Android ゲームを作成しています。問題は、これらのボタンの 1 つが (多くの電話で) [メニュー] ボタンのすぐ隣にあるため、プレーヤーが誤って [メニュー] を押してしまう可能性があることです。

短く押すと、ゲームを一時停止してゲーム内メニューを表示します。問題ありません。

しかし、ボタンを長押しすると、Android は画面の下半分にソフト キーボードを開きます。邪魔になるし、このActivityでは全く役に立たないので、無効にしたいと思います。

次のアプローチを試しました。

InputMethodManager 経由

From:キーボード操作を行わないアクティビティでソフト キーボードを非表示にする

ビューが 1 つしかないので (a GLSurfaceView)、これを my で試しましたActivity.onCreate():

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

機能しません: メニューを長押しすると、ソフト キーボードがまだ表示されます。

AndroidManifest.xml 経由

From:アプリケーション全体でAndroidソフトキーボードが表示されないようにする方法

これをマニフェストに追加しました:

<activity 
    android:windowSoftInputMode="stateAlwaysHidden"
>

何もしないこともたくさんあります。

それで...方法はありますか?どのように?

4

4 に答える 4

12

これが、少なくとも、私の差し迫った問題の解決策です。ボタンを長押ししても、ゲーム内メニューが表示されます。

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

しかし、それはハックのように感じるので、誰かがより良い解決策を考え出すことを願っています.

于 2011-01-13T15:29:24.843 に答える
3

しかし、ボタンを長押しすると、Android は画面の下半分にソフト キーボードを開きます。

どんな電話を持ってますか?本気ですか?私は一度もそれが起こるのを見たことがなく、試してみましたが、私の電話では機能しません.

また、それはユーザーの問題のように聞こえます。ユーザーを転覆しようとしないでください。ユーザーが本当にアプリでキーボードを開きたい場合は、許可する必要があります。それが役に立たない場合は、反撃して消えてしまいます。

さらに懸念される問題は、ボタンがメニュー ボタンに非常に近いことです。

于 2011-01-13T18:44:01.647 に答える
0

代わりにhideSoftInputFromWindow()を使用してみてください。ドキュメントによると:

現在入力を受け入れているウィンドウのコンテキストからソフト入力ウィンドウを非表示にするように要求します。

于 2011-01-13T16:23:03.867 に答える