web-dev-qa-db-ja.com

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

'Next'を押すと、User EditTextにフォーカスが移るはずです。それから、パスワードから、それは右に動く必要があります。それをコーディングする方法について私を手伝ってもらえますか?

enter image description here

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

フォーカス処理

焦点の移動は、与えられた方向で最近傍点を見つけるアルゴリズムに基づいています。まれに、デフォルトのアルゴリズムが開発者の意図した動作と一致しない場合があります。

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

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

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

422
Tobrun
Android:inputType="text"

同じ効果をもたらすはずです。次の要素にフォーカスを持ってくるために次にヒットした後。

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

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

62
Matthias H

あなたのeditTextを追加してください

Android:imeOptions="actionNext"
Android:singleLine="true"

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

    Android:windowSoftInputMode="adjustResize|stateHidden"

レイアウトファイルScrollViewのがすべてルートまたは親レイアウトに設定されている

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

毎回追加する必要がない場合は、styleを作成します。values/style.xmlにstyleを追加します

デフォルト/スタイル:

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

次の行を使う

Android:nextFocusDown="@+id/parentedit"

parenteditは、次に注目するEditTextのIDです。

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

Android:inputType="text"

または

Android:inputType="number"

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

15
Spring Breaker
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
Hitesh Kushwah

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を返したときにこれを見つけました。

6
user3701500

次のコードを使うだけでうまくいくでしょう。そしてすべてのedittextにinputTypeを使うと、次のボタンがキーボードに表示されます。

Android:inputType="text" or Android:inputType="number" etc
3
pawan kumar

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

focusSearch(FOCUS_DOWN).requestFocus();

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

2
flawyte

EditTextと一緒に複数行のimeOptionsを使いたい場合は、次のようにしてください。

Android:inputType="textImeMultiLine"
1
Chris
<?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>
1

InputTypeをedittextに追加して入力すると次のedittextに行きます

Android:inputType="text"
Android:inputType="textEmailAddress"
Android:inputType="textPassword" 

などなど。

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

1
Sharmad Desai

簡単な方法、1つ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"/>
0
PsyhoLord
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
Kishore Reddy