teclado sierra sesion pantalla mac inicio high cómo como codigo activar acomodar java ios libgdx on-screen-keyboard

java - sierra - libgdx: IOS en el teclado de la pantalla no dispara eventos consistentemente



teclado virtual java codigo (1)

Solo quería hacer un seguimiento en caso de que alguien se encuentre aquí en el futuro. Terminé creando mi propio teclado en pantalla, no pude lograr que los eventos funcionaran de manera consistente en iOS.

Si alguien tiene algo que quiera agregar en el futuro, lo registraré para aceptar la respuesta.

Estoy teniendo problemas con InputProcessor solo en mi compilación de IOS. Este código funciona para compilaciones de escritorio y Android, pero no para iOS.

Básicamente, necesito detectar un evento cada vez que el usuario escriba en el teclado en pantalla. Pero en iOS solo veo mi impresión de KeyTyped intermitentemente y solo cuando escribo rápidamente en el teclado en pantalla. Todos los demás toques solo muestran una nueva línea en la consola, no estoy seguro de dónde se origina esta nueva salida de línea.

Parece que el problema proviene de que iOS envía eventos a mi aplicación y de cómo los recibe LibGDX InputProcessor. He intentado crear mi propio objeto que extienda TextField e implemente InputProcessor y luego establezca la instancia de ese objeto como el inputProcessor, pero obtengo el mismo resultado. Si toco en cualquier parte de la pantalla que no sea el teclado en pantalla de iOS, los eventos se disparan constantemente.

Así es como se ve la salida de la consola de iOS cuando escribo muy rápido, si escribo lento, la impresión nunca aparece:

game name field key typed! game name field key typed! game name field key typed!

Hacer lo mismo en un dispositivo Android (nexus 7) produce lo siguiente (que es lo que esperaría):

I/System.out: game name field key down! I/System.out: game name field key up! I/System.out: game name field key typed! I/System.out: game name field key down! I/System.out: game name field key up! I/System.out: game name field key typed! I/System.out: game name field key down! I/System.out: game name field key up! I/System.out: game name field key typed!

aquí está mi código:

public class AccountScreen implements Screen { final PieTherapy game; private Stage stage; private TextField gameNameField; public AccountScreen(final PieTherapy game) { this.game = game; initialize(); } private void initialize() { Viewport vp = new StretchViewport(PieTherapy.WORLD_WIDTH, PieTherapy.WORLD_HEIGHT, game.cam); stage = new Stage(vp); Gdx.input.setInputProcessor(stage); TextField.TextFieldStyle tfs = new TextField.TextFieldStyle(); tfs.font = game.fontTitle; tfs.fontColor = Color.WHITE; tfs.background = new TextureRegionDrawable(new TextureRegion(game.assets.get("menus/textline.png", Texture.class))); tfs.focusedBackground = new TextureRegionDrawable(new TextureRegion(game.assets.get("menus/textline-selected.png", Texture.class))); tfs.cursor = new TextureRegionDrawable(new TextureRegion(game.assets.get("menus/cursor.png", Texture.class))); gameNameField = new TextField("", tfs); gameNameField.setWidth(PieTherapy.WORLD_WIDTH * .80f); gameNameField.setFocusTraversal(true); gameNameField.setPosition(PieTherapy.WORLD_WIDTH *.05f, game.WORLD_HEIGHT * .68f); // see if the player information has already been entered (edit mode) gameNameField.setText(game.primaryPlayer.gameName); gameNameField.addListener(new InputListener(){ @Override public void touchUp (InputEvent event, float x, float y, int pointer, int button) { System.out.println("game name field touch up!"); } @Override public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { System.out.println("game name field touch down!"); return true; } @Override public boolean keyDown(InputEvent event, int keycode) { System.out.println("game name field key down!"); return super.keyDown(event, keycode); } @Override public boolean keyUp(InputEvent event, int keycode) { System.out.println("game name field key up!"); return super.keyUp(event, keycode); } @Override public boolean keyTyped(InputEvent event, char character) { System.out.println("game name field key typed!"); return super.keyTyped(event, character); } }); gameNameField.getOnscreenKeyboard().show(true); gameNameField.setCursorPosition(gameNameField.getText().length()); stage.addActor(gameNameField); stage.setKeyboardFocus(gameNameField); } @Override public void show() { } @Override public void render(float delta) { Gdx.gl.glClearColor(0, 0, 0f, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); game.batch.begin(); game.font.draw(game.batch, "Your name in the game! You can stick with the/nautomatically generated" + "one or change to your own./n Red: name is not available, " + "green: available.", PieTherapy.WORLD_WIDTH *.36f, PieTherapy.WORLD_HEIGHT *.93f); game.batch.end(); update(delta); } private void update(float delta) { stage.act(delta); stage.draw(); game.batch.begin(); game.batch.end(); } @Override public void resize(int width, int height) { } @Override public void pause() { } @Override public void resume() { } @Override public void hide() { } @Override public void dispose() { } }

Versión LibGDX: versión 1.9.6 RoboVM (MobiDevelop): 2.3.1

Creo que siempre puedo rodar mi propio teclado en pantalla ...