OpenGL ES 2.0 アプリケーションのユーザー入力を取得したいのですが、2 つの問題があります。
- 1) ソフトウェア キーボードをアプリの前面に表示するにはどうすればよいですか?
- 2) どうすれば入力をキャッチできますか?
私はこれを使用しようとしました:
//OpenGL ES 2.0 view class
public class OGLES2View extends GLSurfaceView
{
private static final int OGLES_VERSION = 2;
private static Handler softKeyboardHandler;
private final static int SHOW_IME_KEYBOARD = 0;
private final static int HIDE_IME_KEYBOARD = 1;
private static EditText textEdit;
private static InputMethodManager imm;
private void setSoftKeyboardHandler()
{
softKeyboardHandler = new Handler()
{
public void handleMessage(Message msg)
{
switch(msg.what)
{
case SHOW_IME_KEYBOARD:
textEdit.requestFocus();
imm.showSoftInput(textEdit,inputMethodManager.SHOW_IMPLICIT);//Nothing happens
Log.i("GLVIEW","SHOW KEYBOARD");
break;
case HIDE_IME_KEYBOARD:
imm.hideSoftInput(textEdit, 0);
Log.i("GLVIEW","HIDE KEYBOARD");
break;
default:
break;
}
}
};
}
public OGLES2View(Context context)
{
super(context);
textEdit = new EditText(context);
setEGLContextClientVersion(OGLES_VERSION);
setRenderer(new OGLES2Renderer());
imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
setSoftKeyboardHandler();
}
public static void showIMEKeyboard()
{
softKeyboardHandler.sendEmptyMessage(SHOW_IME_KEYBOARD);
}
public static void hideIMEKeyboard()
{
softKeyboardHandler.sendEmptyMessage(HIDE_IME_KEYBOARD);
}
//In main activity class
private GLSurfaceView ogles2SurfaceView = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//...
ogles2SurfaceView = new OGLES2View(this);
setContentView(ogles2SurfaceView);
}
Handler はメッセージを受け取りますが、ソフトウェア キーボードがありません。テキストをキャッチするために、いくつかのクラスを書きました:
public class TextInputWatcher implements TextWatcher
と:
textEdit.addTextChangedListener(/*TextInputWatcher instance*/);
TextEdit
または、入力されたテキストをバックまたはエンターキーでキャッチ するように a を拡張します。
PSタブレット - トランスを手に入れたので、ハードウェア キーボードが取り付けられています。ありとなしで試してみましたが、違いはありませんでした。おまけの質問 - ハードウェア キーボードがある場合、ソフトウェア キーボードがポップアップするのを防ぐことができますか? また、どのようにしてそこから入力を取得できますか?