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>

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;
    }
});


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


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>

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.


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!


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"

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.


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

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.


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"/>

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.


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>

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"

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


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
        }
    }

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>

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();
        }
    });
}

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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.