Android'de Soft Keyboard Next tıklandığında başka bir EditText'e git


216

'İleri'ye bastığımda, Kullanıcı EditText'teki odağın Parola'ya taşınması gerekir. Ardından, Şifre'den sağa hareket etmelidir vb. Nasıl kodlanacağı konusunda bana yardımcı olabilir misiniz?

resim açıklamasını buraya girin

<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
Android'e bir göz atın: imeOptions
Tobrun

bu kodu nereye koymalıyım?
androidBoomer

Yanıtlar:


474

Odak Kullanımı

Odak hareketi, belirli bir yönde en yakın komşuyu bulan bir algoritmaya dayanır. Nadir durumlarda, varsayılan algoritma geliştiricinin amaçlanan davranışıyla eşleşmeyebilir.

Yönlü gezinmenin varsayılan davranışını aşağıdaki XML özelliklerini kullanarak değiştirin:

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

Yönlü navigasyonun yanı sıra sekme navigasyonunu da kullanabilirsiniz. Bunun için kullanmanız gerekir

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

Odaklanmak üzere belirli bir görünüm elde etmek için arayın

view.requestFocus()

Değişen belirli odak olaylarını dinlemek için View.OnFocusChangeListener


Klavye düğmesi

android:imeOptionsKlavyenizdeki bu ekstra düğmeyi kullanmak için kullanabilirsiniz .

Uygulamanızla entegrasyonu geliştirmek için bir düzenleyiciyle ilişkilendirilmiş bir IME'de etkinleştirebileceğiniz ek özellikler. Buradaki sabitler imeOptions tarafından tanımlananlara karşılık gelir.

İmeOptions sabitleri çeşitli eylemler ve bayraklar içerir, değerleri için yukarıdaki bağlantıya bakın.

Değer örneği

EylemSonraki :

işlem tuşu, kullanıcıyı metin kabul edecek bir sonraki alana götürerek bir "sonraki" işlemi gerçekleştirir.

İşlem Yapıldı :

işlem tuşu "tamamlandı" işlemini gerçekleştirir, yani giriş yapılacak başka bir şey yoktur ve IME kapatılacaktır.

Kod örneği:

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

Eğer imeoptions olayları dinlemek istiyorsanız 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
Benim durumumda android:nextFocusForward="@+id/.."hile yaptı.
Mr.Moustard

23
Ben koymak android:imeOptions="actionNext"tüm EditTexts ve sorun kayboldu. Çok teşekkürler.
Joaquin Iurchuk

3
Her EditText için hem joaquin hem de Mr.Marytard kullanmak zorundaydım.
Scott Biggs

9
Benim app için, sadece android kullanarak: imeOptions = "actionNext" işe yaramadı. EditText, imeOptions bayrağını dinlemeden önce android: inputType = "[bir şey]" gerekiyordu.
Chris Kelly

4
SONRAKİ düğmesine basarken hangisinin odaklanacağını nasıl bilebilir? Önce "doğru" ve sonra "aşağı" kontrol ediyor mu? Kullanıcı İLERİ tuşuna basarsa, bir sonraki görünümün kimliğinin odaklanmasını sağlayacak bir işlev var mı?
android geliştirici

66
android:inputType="text"

aynı etkiyi getirmelidir. Sonraki vurduktan sonra odak bir sonraki öğeye getirmek.

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

bir sonraki görünümün odaklanmasını istemiyorsanız buna ek olarak kullanın


34

editText'inizi ekleyin

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

manifest'teki aktiviteye özellik ekle

    android:windowSoftInputMode="adjustResize|stateHidden"

düzen dosyasında ScrollView kök veya üst düzen olarak ayarlandı

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

her eklediğinde istemiyorsanız stil oluşturun: değerlere stil ekleyin / style.xml

varsayılan tarz:

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

Kullanımı android:singleLine="true"karmaşıktır.
Praveenkumar

18

Aşağıdaki satırı kullanın

android:nextFocusDown="@+id/parentedit"

parenteditEditTextodaklanacak olanın kimliğidir .

Yukarıdaki satırın da aşağıdaki satıra ihtiyacı olacaktır.

android:inputType="text"

veya

android:inputType="number"

Öneri için teşekkürler @Alexei Khlebnikov.


3
Benim için çalıştı. android:inputType="text"Veya ile birlikte android:inputType="number".
Alexei Khlebnikov

nextFocusDown çalışmazsa nextFocusForward kullanın. Bana yardımcı oldu
Kishan Solanki

android: nextFocusDown = "@ + id / parentedit" benim için çalıştı! teşekkürler
KİRLİ DAVE

12
android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."

Ek alan ekleme

android: InputType = "textNoSuggestions"

benim durumumda çalıştı!


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

Bu üç çizgi sihri yapar

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

6

OnEditorAction işleyicinizde, aşağıdaki örnekte olduğu gibi, eylemi gerçekleştirip işlemediğinizi (true) veya bir mantık uygulayıp normal davranışı (false) isteyip istemediğinizi belirten bir boole döndürmeniz gerektiğini unutmayın:

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

Odak hareket etmediği için mantığımı gerçekleştirdikten sonra doğru döndüğümde bunu buldum.


3

sadece aşağıdaki kodu kullanın, iyi çalışır ve her düzenleme metni için inputType kullanın ve klavyede bir sonraki düğme görünecektir.

android:inputType="text" or android:inputType="number" etc

2

Bazı durumlarda odağı manuel olarak bir sonraki alana taşımanız gerekebilir:

focusSearch(FOCUS_DOWN).requestFocus();

Örneğin, tıklandığında bir tarih seçici açan bir metin alanınız varsa ve kullanıcı tarafından bir tarih seçildiğinde ve seçici kapandığında odağın otomatik olarak bir sonraki giriş alanına geçmesini istiyorsanız buna ihtiyacınız olabilir. XML'de bunu yapmanın bir yolu yoktur, programlı olarak yapılması gerekir.


2

Basit bir şekilde, sadece birkaç alanınız tek tek olduğunda:

Ayarlamanız gerekiyor

android:maxLines="1"

android:imeOptions="actionNext"

android:inputType="" <- Metin türünüzü ayarlayın, aksi takdirde Çok satırlı olur ve bir sonraki sayfaya geçmeyi önler

Örneklem:

<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

Görünümdeki her editText için android: imeOptions = "actionNext" etiketini kullanmayı deneyin .


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
Cevabınızın neden diğerlerinden daha iyi olduğunu açıklamak için cevabınıza bir açıklama koymak isteyebilirsiniz. Cevabınıza eklemek için "düzenle" düğmesine basabilirsiniz.
Brian Tompsett - 莱恩 莱恩

1

Bir satırlı kullanmak isterseniz EditTextbirlikte imeOptions, deneyin:

android:inputType="textImeMultiLine"

1

EditType'a inputType'ı ekleyin ve enter'a bir sonraki düzenleme metnine gidecektir

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

ve daha fazlası.

inputType = textMultiLine enter'daki sonraki düzenleme metnine gitmiyor


1

Kotlin'de Körük gibi kullandım ..

  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. kotlin'de:

    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

Öğeyi kaydırma görünümünde varsa, bu sorunu şu şekilde de çözebilirsiniz:

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

ve faaliyetinizde:

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

Basit yol :

  • İmleci bir sonraki düzenleme metnine otomatik olarak taşı
  • Düzenleme metni son girişse -> gizli klavye

Bunu, .xml dosyasındaki metin alanını düzenlemek için ekleyin

android:inputType="textCapWords"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.