Libgdx: TextField tidak kehilangan fokus saat SelectBox diklik dan diperluas.

Dibuat pada 28 Jul 2014  ·  3Komentar  ·  Sumber: libgdx/libgdx

OS: Windows 8.1, x64
gdxVersi: 1.2.0
Penargetan: Desktop saja (tidak diuji pada platform lain)

Ketika saya mengklik SelectBox untuk membuka daftar dropdown; a TextField di sel tabel yang berdekatan harus kehilangan fokus, tetapi tidak. Komponen-komponen ini berbagi tabel, dan panggung. Tahap mutual memproses input.

Ini tidak benar-benar merusak apa pun, tetapi itu adalah perilaku yang tidak diinginkan dan dapat membuat permainan terlihat tidak profesional, sama saja.

Kode yang relevan untuk direproduksi:

    import com.badlogic.gdx.scenes.scene2d.ui.*;

    final Label titleLabel = new Label(
            "Title: ", skin, "heading");

    final Label typeLabel = new Label(
            "Type: ", skin, "heading");

    final TextField textField = new TextField("", skin);

    final SelectBox<String> contextSelector = new SelectBox<String>(skin);
    contextSelector.setItems("Weapon", "Tool", "Crop", "Machine", "World Rule");

    table.row();
        table.add(titleLabel).right();
        table.add(textField).fill().prefWidth(Gdx.graphics.getWidth() / 5.0f).space(1.0f);
    table.row();
        table.add(typeLabel).right();
        table.add(contextSelector).fill().prefWidth(Gdx.graphics.getWidth() / 5.0f).space(1.0f);
    table.row().height(15.0f); table.add().fill();
    table.row();
        table.add(placeHolderLabel1);
        table.add(startButton).right();

Komentar yang paling membantu

Saya tidak yakin Anda selalu ingin TextField kehilangan fokus saat mengklik aktor lain. Anda dapat menyesuaikan perilaku sendiri dengan mudah:

stage.getRoot().addCaptureListener(new InputListener() {
    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        if (!(event.getTarget() instanceof TextField)) stage.setKeyboardFocus(null);
        return false;
    }
}

Semua 3 komentar

Saya tidak yakin Anda selalu ingin TextField kehilangan fokus saat mengklik aktor lain. Anda dapat menyesuaikan perilaku sendiri dengan mudah:

stage.getRoot().addCaptureListener(new InputListener() {
    public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
        if (!(event.getTarget() instanceof TextField)) stage.setKeyboardFocus(null);
        return false;
    }
}

Yah, itu pasti menyelesaikan masalah. Bersulang. :-)

Sekali lagi saya menemukan solusi elegan untuk masalah saya. scene2d luar biasa :)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

andrejp88 picture andrejp88  ·  4Komentar

HoldYourWaffle picture HoldYourWaffle  ·  4Komentar

nrallakis picture nrallakis  ·  3Komentar

tomcashman picture tomcashman  ·  3Komentar

BenMcLean picture BenMcLean  ·  4Komentar