de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 Alessandro
Alessandro
Question

Perilaku imeOptions, imeActionId dan imeActionLabel

I'm cukup baru untuk Android native development, dan I'm mencoba untuk mencari tahu bagaimana untuk menyesuaikan IME tombol tindakan. I've menatap Google dokumentasi, tapi saya dapat menemukan beberapa informasi tentang perilaku yang diharapkan.

Dari offical panduan saya memahami bahwa tindakan keyboard tombol yang dapat dikonfigurasi menggunakan atribut:

  • android:imeOptions dapat mengatur teks/id tombol ditampilkan di dekat tombol spasi untuk beberapa pra-didefinisikan nilai-nilai (E. g. actionGo set kunci label Pergi dan id ke 2)
  • android:imeActionLabel mengatur label tombol yang ditampilkan dalam area input ketika keyboard layar penuh, biasanya dalam modus lansekap. Dapat diatur untuk setiap nilai string.
  • android:imeActionId sama seperti sebelumnya tapi mengatur Id numerik dilewatkan ke metode callback

Tapi setelah beberapa upaya empiris I've ditemukan perilaku yang berbeda antara API level 15 dan selanjutnya tingkat API.

I've mengatur sederhana EditText elemen dengan atribut berikut:

<EditText
        ...
        android:imeOptions="actionGo"
        android:imeActionLabel="Custom"
        android:imeActionId="666"
        android:inputType="text"/>

dan saya'telah memeriksa efek dengan tingkat API yang berbeda baik dalam modus potret dan lansekap. Berikut ini adalah hasil.

API level 15 - 4.0.3

Dalam modus potret kunci label Pergi dan aksi id dilewatkan ke metode callback adalah 2, dengan demikian untuk imeOptions pengaturan.

Dalam modus lansekap kunci label/id Pergi/2 sebagai modus potret, sementara tombol yang ditampilkan di area input adalah Kustom/666, sesuai dengan imeActionLabel dan imeActionId atribut.

API level 16, 17 dan 18 - 4.1.2, 4.2.2 dan 4.3

Baik dalam modus potret dan lansekap kunci dan tombol yang ditampilkan dengan Kustom label dan terikat ke 666 id, mengabaikan imeOptions atribut.

Ketidakcocokan ini di masa mendatang cukup menjengkelkan karena:

  • dengan tingkat API >= 16 anda bisa't membedakan antara kunci tombol dan area input tombol
  • dengan API level = 15 anda dapat't mengatur teks kustom untuk kunci tombol.

Apakah anda tahu bagaimana untuk mendapatkan ini baik dalam API 15 dan 16+? Atau jika ada cara untuk mendapatkan perilaku yang konsisten di semua (atau setidaknya sebagian) versi API?

Mungkin aku kehilangan sesuatu dalam pengaturan IME yang bisa membenarkan perilaku yang berbeda...

Terima kasih banyak!

44 2013-11-03T14:15:46+00:00 4
Pemrograman
android
android-input-method
 Cloudream
Cloudream
21 Maret 2014 в 2:43
2014-03-21T02:43:06+00:00
Lebih
Sumber
Sunting
#22700927

Sebut saja .setImeActionLabel() programtically di pulau jawa kode untuk mengatur actionID (lagi) ke salah satu yang anda inginkan.

editText.setImeActionLabel(getString(R.string.xxx), EditorInfo.IME_ACTION_GO);
 Cloudream
Cloudream
Jawaban edit 21 Maret 2014 в 3:03
10
0
Solution / Answer
Dan Hulme
Dan Hulme
8 April 2014 в 11:41
2014-04-08T11:41:37+00:00
Lebih
Sumber
Sunting
#22700928

It's benar-benar sampai ke metode input aplikasi, bukan Android framework itu sendiri, untuk memutuskan apa yang harus dilakukan dengan nilai-nilai yang anda tetapkan.

Kerangka Android hanya melewati nilai yang ditetapkan melalui metode input, yang kemudian dapat memilih apa tombol untuk menunjukkan pada keyboard atau "diekstrak" EditText dalam tampilan layar penuh. Kerangka Android pengaruh EditorInfo dalam dua cara:-

  • Lewat melalui EditorInfo.makeCompatible untuk memastikan nilai-nilai di dalamnya adalah kompatibel antara keyboard's dan aplikasi's targetApiVersion ini. Pada saat ini hanya mempengaruhi beberapaInputType` nilai-nilai, bukan editor tindakan, namun hal ini dapat berubah jika baru editor tindakan (atau benar-benar baru pengaturan) diperkenalkan.

  • Set default perilaku untuk metode input, termasuk perilaku di sekitar full-screen editor. Jika metode input memilih untuk tidak mengganti perilaku default ini, maka bisa berakhir dengan perilaku yang's yang berbeda antara Android versi. Banyak keyboard yang tidak memilih untuk mengatur perilaku mereka sendiri, dengan cara yang's konsisten antara versi Android.

Untuk alasan itu,'s tidak begitu sederhana untuk mengatakan bahwa tertentu EditorInfo lapangan memiliki efek tertentu pada setiap versi, dan ada's tidak ada cara untuk memastikan perilaku yang konsisten, bahkan pada salah satu versi Android. Semua anda're lakukan adalah memberikan petunjuk untuk metode input, yang memilih bagaimana untuk menyajikan mereka kepada pengguna.

9
0
 Donato
Donato
8 Maret 2017 в 9:59
2017-03-08T21:59:04+00:00
Lebih
Sumber
Sunting
#22700930

Ketika anda memulai sebuah proyek Android baru, itu memberikan sebuah petunjuk untuk pertanyaan anda. Ada Kegiatan yang disebut LoginActivity yang dapat anda buat sebagai default layar login. Kegiatan ini akan menghasilkan sebuah EditText seperti demikian:

            <EditText
                    android:id="@+id/password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/prompt_password"
                    android:imeActionId="@+id/login"
                    android:imeActionLabel="@string/action_sign_in_short"
                    android:imeOptions="actionUnspecified"
                    android:inputType="textPassword"
                    android:maxLines="1"
                    android:singleLine="true"/>

Sekarang jika anda membaca dokumentasi, anda akan tahu bahwa imeOptions atribut memungkinkan anda untuk menentukan tindakan tambahan untuk bidang teks. Misalnya, keyboard yang muncul memiliki tindakan di sudut kanan bawah seperti "Next". Menggunakan imeOptions anda dapat memilih tindakan lain dari daftar standar yang disediakan oleh Android. Anda dapat menentukan sesuatu seperti "actionSend" atau "actionSearch".

Setelah anda melakukan itu, agar Aktivitas anda, anda dapat mendengarkan bahwa tindakan menggunakan setOnEditorActionListener event handler:

    mPasswordView = (EditText) findViewById(R.id.password);
    mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
            if (id == R.id.login || id == EditorInfo.IME_NULL) {
                attemptLogin();
                return true;
            }
            return false;
        }
    });

Perhatikan bagaimana kami menargetkan imeActionId di sini. Ini adalah metode lain untuk target yang EditText dalam Aktivitas anda, sementara juga memiliki fleksibilitas untuk mengubah tindakan pada keyboard input.

3
0
 Hamid
Hamid
14 Januari 2015 в 8:53
2015-01-14T20:53:02+00:00
Lebih
Sumber
Sunting
#22700929

Jika seseorang adalah merancang sebuah custom keyboard untuk Android dan memiliki masalah dengan label Enter, anda harus melakukan berikut ini. Dalam sampel dari Android keyboard kustom kami memiliki metode berikut dalam SoftKeyboard.java:

@Override
    public void onStartInput(EditorInfo attribute, boolean restarting)
    {
        super.onStartInput(attribute, restarting);
.
. // the implementation
. 
        mCurKeyboard.setImeOptions(getResources(), attribute.imeOptions);
    }

Perubahan terakhir baris ke baris berikut:

mCurKeyboard.setImeOptions(getResources(), attribute);

Sekarang LatinKeyboard.java perubahan setImeOptions metode seperti di bawah ini:

void setImeOptions(Resources res, EditorInfo ei)
    {
        if (mEnterKey == null)
        {
            return;
        }

        switch (ei.imeOptions & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION))
        {
            case EditorInfo.IME_ACTION_SEND:
                mEnterKey.iconPreview = null;
                mEnterKey.icon = null;
                mEnterKey.label = res.getText(R.string.label_send_key);
                break;
            case EditorInfo.IME_ACTION_GO:
                mEnterKey.iconPreview = null;
                mEnterKey.icon = null;
                mEnterKey.label = res.getText(R.string.label_go_key);
                break;
            case EditorInfo.IME_ACTION_NEXT:
                mEnterKey.iconPreview = null;
                mEnterKey.icon = null;
                mEnterKey.label = res.getText(R.string.label_next_key);
                break;
            case EditorInfo.IME_ACTION_SEARCH:
                mEnterKey.icon = res.getDrawable(R.drawable.sym_keyboard_search);
                mEnterKey.label = null;
                break;
            default:
                mEnterKey.iconPreview = null;
                mEnterKey.label = res.getText(R.string.label_enter_key);
                mEnterKey.icon = null;
                break;
        }

        if (ei.actionLabel != null)
        {
            mEnterKey.iconPreview = null;
            mEnterKey.icon = null;
            mEnterKey.label = ei.actionLabel;
        }
    }

Sekarang anda keyboard kustom menunjukkan label yang tepat berdasarkan apa yang didefinisikan dalam file xml untuk imeActionLabel.

2
0
Related communities 1
Android Studio Indonesia
Android Studio Indonesia
1 778 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi