Pindah ke EditText lain ketika Soft Keyboard Next diklik di Android

216

Ketika saya menekan 'Berikutnya', fokus pada Teks Edit Pengguna harus dipindahkan ke Kata Sandi. Kemudian, dari Kata Sandi, itu harus bergerak ke kanan dan seterusnya. Bisakah Anda membantu saya tentang cara membuat kode?

masukkan deskripsi gambar di sini

<LinearLayout
    android:id="@+id/LinearLayout01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="User Name*" />

    <EditText
        android:id="@+id/txt_User"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true" />

</LinearLayout>


<LinearLayout
    android:id="@+id/LinearLayout02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password*" />

    <EditText
        android:id="@+id/txt_Password"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true"
        android:password="true" />

    <TextView
        android:id="@+id/confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password*" />

    <EditText
        android:id="@+id/txt_Confirm"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true"
        android:password="true" />

</LinearLayout>
androidBoomer
sumber
1
Lihatlah android: imeOptions
Tobrun
di mana saya harus meletakkan kode itu?
androidBoomer

Jawaban:

473

Penanganan Fokus

Gerakan fokus didasarkan pada algoritma yang menemukan tetangga terdekat dalam arah tertentu. Dalam kasus yang jarang terjadi, algoritma default mungkin tidak cocok dengan perilaku pengembang yang dimaksud.

Ubah perilaku default navigasi terarah dengan menggunakan atribut XML berikut:

android:nextFocusDown="@+id/.."  
android:nextFocusLeft="@+id/.."    
android:nextFocusRight="@+id/.."    
android:nextFocusUp="@+id/.."  

Selain navigasi terarah Anda dapat menggunakan navigasi tab. Untuk ini, Anda perlu menggunakan

android:nextFocusForward="@+id/.."

Untuk mendapatkan tampilan tertentu agar fokus, hubungi

view.requestFocus()

Untuk mendengarkan acara fokus perubahan tertentu, gunakan a View.OnFocusChangeListener


Tombol keyboard

Anda dapat menggunakannya android:imeOptionsuntuk menangani tombol ekstra pada keyboard Anda.

Fitur tambahan yang dapat Anda aktifkan di IME yang terkait dengan editor untuk meningkatkan integrasi dengan aplikasi Anda. Konstanta di sini sesuai dengan yang didefinisikan oleh imeOptions.

Konstanta imeOptions mencakup berbagai tindakan dan bendera, lihat tautan di atas untuk nilainya.

Contoh nilai

ActionNext :

tombol tindakan melakukan operasi "berikutnya", membawa pengguna ke bidang berikutnya yang akan menerima teks.

ActionDone :

tombol tindakan melakukan operasi "selesai", biasanya berarti tidak ada lagi yang diinput dan IME akan ditutup.

Contoh kode:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="16dp"
        android:imeOptions="actionNext"
        android:maxLines="1"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="24dp"
        android:imeOptions="actionDone"
        android:maxLines="1"
        android:ems="10" />

</RelativeLayout>

Jika Anda ingin mendengarkan acara perbaikan gunakan a TextView.OnEditorActionListener.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

Tobrun
sumber
20
Dalam kasus saya android:nextFocusForward="@+id/.."melakukan trik.
Mr.Moustard
23
Saya menaruh android:imeOptions="actionNext"semua EditText saya dan masalahnya hilang. Terima kasih banyak.
Joaquin Iurchuk
3
Saya harus menggunakan joaquin dan Mr.Moustard untuk setiap EditText.
Scott Biggs
9
Untuk aplikasi saya, hanya menggunakan android: imeOptions = "actionNext" tidak berfungsi. EditText membutuhkan android: inputType = "[sesuatu]" "sebelum itu akan mendengarkan flag imeOptions.
Chris Kelly
4
Bagaimana cara mengetahui yang mana yang menjadi fokus saat menekan NEXT? Apakah itu memeriksa "benar" dan kemudian "turun"? Apakah ada fungsi untuk membuat id tampilan berikutnya menjadi terfokus, jika pengguna akan menekan tombol NEXT?
Pengembang android
66
android:inputType="text"

harus membawa efek yang sama. Setelah menekan berikutnya untuk membawa fokus ke elemen berikutnya.

android:nextFocusDown="@+id/.."

gunakan ini sebagai tambahan jika Anda tidak ingin tampilan berikutnya mendapatkan fokus

Matthias H
sumber
34

tambahkan editText Anda

android:imeOptions="actionNext"
android:singleLine="true"

tambahkan properti ke aktivitas dalam manifes

    android:windowSoftInputMode="adjustResize|stateHidden"

dalam file tata letak ScrollView ditetapkan sebagai tata letak root atau induk semua ui

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ukuya.marketplace.activity.SignInActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

       <!--your items-->

    </ScrollView>

</LinearLayout>

jika Anda tidak ingin setiap kali itu ditambahkan, buat gaya: tambahkan gaya dalam nilai / style.xml

default / gaya:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="editTextStyle">@style/AppTheme.CustomEditText</item>
    </style>

<style name="AppTheme.CustomEditText"     parent="android:style/Widget.EditText">
        //...
        <item name="android:imeOptions">actionNext</item>
        <item name="android:singleLine">true</item>
    </style>
Abror Esonaliyev
sumber
Penggunaan android:singleLine="true"didepresiasi.
Praveenkumar
18

Gunakan baris berikut

android:nextFocusDown="@+id/parentedit"

parenteditadalah ID selanjutnya yang EditTextakan difokuskan.

Baris di atas juga perlu baris berikut.

android:inputType="text"

atau

android:inputType="number"

Terima kasih atas sarannya @Alexei Khlebnikov.

Pemecah Musim Semi
sumber
3
Ini berhasil untuk saya. Bersama dengan android:inputType="text"atau android:inputType="number".
Alexei Khlebnikov
jika nextFocusDown tidak berfungsi, maka gunakan nextFocusForward. Itu membantu saya
Kishan Solanki
android: nextFocusDown = "@ + id / parentedit" bekerja untuk saya! terima kasih
DIRTY DAVE
12
android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."

Menambahkan bidang ekstra

android: inputType = "textNoSuggestions"

bekerja dalam kasus saya!

Tripathee Gaurav
sumber
9
<AutoCompleteTextView
                android:id="@+id/email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/user"
                android:hint="@string/username"
                android:inputType="text"
                android:maxLines="1"
                android:imeOptions="actionNext"
                android:singleLine="true" />

Tiga baris ini melakukan keajaiban

            android:maxLines="1"
            android:imeOptions="actionNext"
            android:singleLine="true"
Hitesh Kushwah
sumber
6

Di penangan onEditorAction Anda, ingatlah bahwa Anda harus mengembalikan boolean yang menunjukkan jika Anda menangani tindakan (benar) atau jika Anda menerapkan beberapa logika dan menginginkan perilaku normal (salah), seperti dalam contoh berikut:

EditText te = ...
te.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            // Some logic here.
            return true; // Focus will do whatever you put in the logic.
        }
        return false;  // Focus will change according to the actionId
    }
});

Saya menemukan ini ketika saya kembali benar setelah melakukan logika saya karena fokus tidak bergerak.

pengguna3701500
sumber
3

cukup gunakan kode berikut ini akan berfungsi dengan baik dan gunakan inputType untuk setiap edittext dan tombol berikutnya akan muncul di keyboard.

android:inputType="text" or android:inputType="number" etc
pawan kumar
sumber
2

Dalam beberapa kasus, Anda mungkin perlu memindahkan fokus ke bidang berikutnya secara manual:

focusSearch(FOCUS_DOWN).requestFocus();

Anda mungkin memerlukan ini jika, misalnya, Anda memiliki bidang teks yang membuka pemilih tanggal saat diklik, dan Anda ingin fokus berpindah secara otomatis ke bidang input berikutnya setelah tanggal dipilih oleh pengguna dan pemilih ditutup. Tidak ada cara untuk menangani ini dalam XML, itu harus dilakukan secara terprogram.

cacat
sumber
2

Cara sederhana, ketika Anda memiliki hanya beberapa bidang satu per satu:

Perlu diatur

android:maxLines="1"

android:imeOptions="actionNext"

android:inputType="" <- Tetapkan jenis teks Anda, dalam hal lain itu akan menjadi Multiline dan mencegah untuk melanjutkan

Sampel:

<EditText android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:textSize="@dimen/text_large"
              android:maxLines="1"
              android:inputType="textEmailAddress"
              android:imeOptions="actionNext"
              android:layout_marginLeft="@dimen/element_margin_large"
              android:layout_marginRight="@dimen/element_margin_large"
              android:layout_marginTop="0dp"/>
PsyhoLord
sumber
2

Coba Gunakan android: imeOptions = "actionNext" tag untuk setiap editText di Lihat itu akan secara otomatis fokus ke edittext berikutnya ketika Anda mengklik Next dari softKeyboard.

Kuldeep Rathee
sumber
1
<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="vertical" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="666dp"
android:background="#1500FFe5"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
    android:id="@+id/TextView02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editGrWt"
    android:layout_marginTop="14dp"
    android:layout_toLeftOf="@+id/textView3"
    android:ems="6"
    android:text="    Diamond :"
    android:textColor="@color/background_material_dark"
    android:textSize="15sp" />
  <EditText
    android:id="@+id/editDWt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/TextView02"
    android:layout_alignLeft="@+id/editGrWt"
    android:background="@color/bright_foreground_inverse_material_light"
    android:ems="4"
    android:hint="Weight"
    android:inputType="numberDecimal"
    android:nextFocusLeft="@+id/editDRate"
    android:selectAllOnFocus="true"
    android:imeOptions="actionNext"

    />
 <requestFocus />


<TextView
    android:id="@+id/TextView03"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/TextView02"
    android:layout_below="@+id/TextView02"
    android:layout_marginTop="14dp"
    android:ems="6"
    android:text="    Diamond :"
    android:textColor="@color/background_material_dark"
    android:textSize="15sp" />

<EditText
    android:id="@+id/editDWt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/TextView03"
    android:layout_alignBottom="@+id/TextView03"
    android:layout_alignLeft="@+id/editDWt"
    android:background="@color/bright_foreground_inverse_material_light"
    android:ems="4"
    android:hint="Weight"
    android:inputType="numberDecimal"
    android:text="0"
    android:selectAllOnFocus="true"
    android:imeOptions="actionNext"/>
 <requestFocus />

<TextView
    android:id="@+id/TextView04"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editDWt1"
    android:layout_marginTop="14dp"
    android:layout_toLeftOf="@+id/textView3"
    android:ems="6"
    android:text="         Stone :"
    android:textColor="@color/background_material_dark"
    android:textSize="15sp" />

<EditText
    android:id="@+id/editStWt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/TextView04"
    android:layout_alignBottom="@+id/TextView04"
    android:layout_alignLeft="@+id/editDWt1"
    android:background="@color/bright_foreground_inverse_material_light"
    android:ems="4"
    android:hint="Weight"
    android:inputType="numberDecimal"
    android:nextFocusForward="@+id/editStRate1"
    android:imeOptions="actionNext" />
 <requestFocus />
  <TextView
     android:id="@+id/TextView05"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignLeft="@+id/TextView04"
     android:layout_below="@+id/editStRate1"
     android:layout_marginTop="14dp"
     android:ems="6"
     android:text="         Stone :"
     android:textColor="@color/background_material_dark"
     android:textSize="15sp" />


</RelativeLayout>

</ScrollView>
Vithani Nilkanth
sumber
4
Anda mungkin ingin memberikan penjelasan dengan jawaban Anda untuk menjelaskan mengapa jawaban Anda lebih baik daripada yang lain. Anda dapat menekan tombol "edit" untuk menambahkan jawaban Anda.
Brian Tompsett - 汤 莱恩
1

Jika Anda ingin menggunakan multiline EditTextdengan imeOptions, coba:

android:inputType="textImeMultiLine"
Chris
sumber
1

Tambahkan inputType ke edittext dan pada enter itu akan pergi edittext berikutnya

android:inputType="text"
android:inputType="textEmailAddress"
android:inputType="textPassword" 

dan masih banyak lagi.

inputType = textMultiLine tidak pergi ke edittext berikutnya saat masuk

Sharmad Desai
sumber
1

Di Kotlin saya telah menggunakan Bellow seperti ..

  1. xml:

    <EditText
      android:id="@+id/et_amount"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:imeOptions="actionNext"
      android:inputType="number"
      android:singleLine="true" />
  2. di kotlin:

    et_amount.setOnEditorActionListener { v, actionId, event ->
    
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            // do some code
            true
        } else {
            false
        }
    }
Enamul Haque
sumber
0
Inside Edittext just arrange like this


<EditText
    android:id="@+id/editStWt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:imeOptions="actionNext" //now its going to rightside/next field automatically
    ..........
    .......

</EditText>
Kishore Reddy
sumber
0

Jika Anda memiliki elemen dalam tampilan gulir maka Anda juga dapat menyelesaikan masalah ini sebagai:

<com.google.android.material.textfield.TextInputEditText
                android:id="@+id/ed_password"
                android:inputType="textPassword"
                android:focusable="true"
                android:imeOptions="actionNext"
                android:nextFocusDown="@id/ed_confirmPassword" />

dan dalam aktivitas Anda:

edPassword.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_NEXT) {
                focusOnView(scroll,edConfirmPassword);
                return true;
            }
            return false;
        }
    });

public void focusOnView(ScrollView scrollView, EditText viewToScrollTo){
    scrollView.post(new Runnable() {
        @Override
        public void run() {
            scrollView.smoothScrollTo(0, viewToScrollTo.getBottom());
            viewToScrollTo.requestFocus();
        }
    });
}
Abdullah Hashmi
sumber
0

Cara sederhana:

  • Pindahkan kursor secara otomatis ke edittext berikutnya
  • Jika edittext adalah input terakhir -> keyboard tersembunyi

Tambahkan ini ke bidang edittext dalam file .xml

android:inputType="textCapWords"
vuhoanghiep1993
sumber