Androidでソフトキーボードの[次へ]をクリックしたときに別のEditTextに移動する


216

「次へ」を押すと、ユーザーEditTextのフォーカスをパスワードに移動する必要があります。次に、パスワードから右に移動する必要があります。コーディング方法を教えてください。

ここに画像の説明を入力してください

<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:imeOptions
Tobrun

そのコードはどこに置くべきですか?
androidBoomer 2013

回答:


472

フォーカス処理

フォーカスの動きは、指定された方向の最近傍を見つけるアルゴリズムに基づいています。まれに、デフォルトのアルゴリズムが開発者の意図した動作と一致しない場合があります。

次のXML属性を使用して、方向ナビゲーションのデフォルトの動作を変更します。

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

方向ナビゲーションの他に、タブナビゲーションを使用できます。このために使用する必要があります

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

特定のビューを取得するには、次を呼び出します

view.requestFocus()

特定の変化するフォーカスイベントをリッスンするには、 View.OnFocusChangeListener


キーボードボタン

android:imeOptionsキーボードの追加のボタンを処理するために使用できます。

エディターに関連付けられたIMEで有効にして、アプリケーションとの統合を改善できる追加機能。ここでの定数は、imeOptionsで定義された定数に対応しています。

imeOptionsの定数には、さまざまなアクションとフラグが含まれています。それらの値については、上記のリンクを参照してください。

値の例

ActionNext

アクションキーは「次の」操作を実行し、テキストを受け入れる次のフィールドにユーザーを移動します。

ActionDone

アクションキーは「完了」操作を実行します。これは通常、入力するものは何もないことを意味し、IMEは閉じられます。

コード例:

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

imeoptionsイベントをリッスンする場合は、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
私の場合android:nextFocusForward="@+id/.."はトリックをしました。
Mr.Moustard 2014年

23
私はandroid:imeOptions="actionNext"すべてのEditTextを使用しましたが、問題はなくなりました。感謝します。
Joaquin Iurchuk

3
EditTextごとにjoaquinとMr.Moustardの両方を使用する必要がありました。
Scott Biggs

9
私のアプリでは、android:imeOptions = "actionNext"を使用するだけでは機能しませんでした。EditTextは、imeOptionsフラグをリッスンする前にandroid:inputType = "[something]"を必要としました。
クリスケリー

4
NEXTを押したときにどちらにフォーカスするかはどのようにしてわかりますか?「右」と「下」をチェックしますか?ユーザーがNEXTキーを押した場合、次のビューのIDをフォーカスする関数はありますか?
Androidデベロッパー

66
android:inputType="text"

同じ効果をもたらすはずです。次を押して、次の要素にフォーカスを移動した後。

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

次のビューでフォーカスを取得したくない場合は、これを追加で使用します


34

editTextを追加します

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

マニフェストのアクティビティにプロパティを追加する

    android:windowSoftInputMode="adjustResize|stateHidden"

レイアウトファイルScrollViewでルートまたは親レイアウトとして設定されたすべての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>

追加するたびに必要ない場合は、スタイルを作成します。values/ style.xmlにスタイルを追加します

デフォルト/スタイル:

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

の使用android:singleLine="true"は低価格です。
Praveenkumar

18

次の行を使用します

android:nextFocusDown="@+id/parentedit"

parentedit 次のIDです EditTextフォーカス。

上記の行には、次の行も必要です。

android:inputType="text"

または

android:inputType="number"

提案@Alexei Khlebnikovをありがとう。


3
それは私のために働いた。android:inputType="text"またはandroid:inputType="number"
アレクセイフレブニコフ2015年

nextFocusDownが機能しない場合は、nextFocusForwardを使用します。それは私を助けました
Kishan Solanki

android:nextFocusDown = "@ + id / parentedit"がうまくいきました!ありがとう
DIRTY DAVE

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

追加フィールドを追加する

android:inputType = "textNoSuggestions"

私の場合はうまくいきました!


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

これらの3行は魔法を行います

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

6

onEditorActionハンドラでは、次の例のように、アクションを処理しているか(true)、またはロジックを適用して通常の動作が必要か(false)を示すブール値を返す必要があることに注意してください。

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

フォーカスが移動しなかったため、ロジックを実行した後にtrueに戻ったときにこれを見つけました。


3

次のコードを使用するだけで正常に動作し、すべてのedittextにinputTypeを使用すると、キーボードに次のボタンが表示されます。

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

2

場合によっては、フォーカスを次のフィールドに手動で移動する必要があります。

focusSearch(FOCUS_DOWN).requestFocus();

たとえば、クリックで日付ピッカーを開くテキストフィールドがあり、ユーザーが日付を選択してピッカーが閉じると、フォーカスが次の入力フィールドに自動的に移動するようにする場合に、これが必要になることがあります。これをXMLで処理する方法はありません。プログラムで実行する必要があります。


2

簡単な方法、1つずつフィールドが少ない場合:

設定する必要があります

android:maxLines="1"

android:imeOptions="actionNext"

android:inputType="" <-テキストのタイプを設定します。それ以外の場合は、複数行になり、次に進むのを防ぎます

サンプル:

<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

ビューのすべてのeditTextにandroid:imeOptions = "actionNext"タグを使用してみてください。softKeyboardの[次へ]をクリックすると、次のedittextに自動的にフォーカスします。


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
自分の答えが他の人より優れている理由を説明するために、回答に説明を加えることをお勧めします。「編集」ボタンを押して回答に追加できます。
ブライアントンプセット-汤莱恩

1

で複数行を使用する場合EditTextimeOptions、以下を試してください。

android:inputType="textImeMultiLine"

1

inputTypeをedittextに追加し、Enterで次のedittextに移動します

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

などなど。

inputType = textMultiLineは、入力時に次の編集テキストに移動しません


1

Kotlinでは、Bellowなどを使用しました。

  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. コトリンで:

    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

要素がスクロールビューにある場合、この問題を次のように解決することもできます。

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

そしてあなたの活動で:

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

簡単な方法:

  • カーソルを次の編集テキストに自動移動
  • edittextが最後の入力の場合->非表示のキーボード

これを.xmlファイルのedittextフィールドに追加します

android:inputType="textCapWords"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.