Android에서 Soft Keyboard Next를 클릭하면 다른 EditText로 이동


216

'Next'를 누르면 User EditText의 초점이 Password로 이동해야합니다. 그런 다음 비밀번호에서 오른쪽으로 이동해야합니다. 코드 작성 방법을 알려 주시겠습니까?

여기에 이미지 설명을 입력하십시오

<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

답변:


473

초점 처리

초점 이동은 주어진 방향에서 가장 가까운 이웃을 찾는 알고리즘을 기반으로합니다. 드문 경우이지만 기본 알고리즘이 개발자의 의도 된 동작과 일치하지 않을 수 있습니다.

다음 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의 상수는 다양한 액션과 플래그를 포함합니다. 값에 대해서는 위의 링크를 참조하십시오.

가치 예

액션 다음 :

조치 키는 "다음"조작을 수행하여 사용자가 텍스트를 승인 할 다음 필드로 이동합니다.

완료 :

동작 키는 "완료"작업을 수행합니다. 일반적으로 입력 할 항목이 더 이상없고 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

23
android:imeOptions="actionNext"모든 EditText에 넣고 문제가 사라졌습니다. 고마워
Joaquin Iurchuk

3
각 EditText에 joaquin과 Mr.Moustard를 모두 사용해야했습니다.
Scott Biggs

9
내 앱의 경우 android : imeOptions = "actionNext"를 사용하면 작동하지 않습니다. EditText는 imeOptions 플래그를 수신하기 전에 android : inputType = "[something]"이 필요했습니다.
Chris Kelly

4
NEXT를 누를 때 어떤 것을 포커스해야하는지 어떻게 알 수 있습니까? "오른쪽"과 "아래"를 확인합니까? 사용자가 NEXT 키를 누르면 다음 뷰의 ID에 초점을 맞추는 기능이 있습니까?
안드로이드 개발자

66
android:inputType="text"

같은 효과를 가져와야합니다. 다음을 누르면 다음 요소에 초점을 맞 춥니 다.

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

다음보기에서 초점을 얻지 않으려면 이 옵션을 추가 하십시오.


34

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>

추가 할 때마다 원하지 않으면 스타일을 작성하십시오. 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다음 EditText에 초점을 맞출 ID입니다 .

위의 줄에는 다음 줄도 필요합니다.

android:inputType="text"

또는

android:inputType="number"

@Alexei Khlebnikov 제안에 감사드립니다.


3
그것은 나를 위해 일했다. 와 함께 android:inputType="text"또는 android:inputType="number".
Alexei Khlebnikov가

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

이 세 줄은 마술을

            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

다음 코드를 사용하면 정상적으로 작동하고 모든 편집 텍스트에 inputType을 사용하면 다음 버튼이 키보드에 나타납니다.

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

2

경우에 따라 포커스를 다음 필드로 수동으로 이동해야 할 수도 있습니다.

focusSearch(FOCUS_DOWN).requestFocus();

예를 들어, 클릭시 날짜 선택기를 여는 텍스트 필드가 있고 사용자가 날짜를 선택하고 선택기가 닫히면 포커스가 다음 입력 필드로 자동 이동하려는 경우에 필요할 수 있습니다. 이를 XML로 처리 할 수있는 방법이 없으며 프로그래밍 방식으로 수행해야합니다.


2

필드가 하나씩 적은 경우 간단한 방법 :

설정 필요

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

View의 모든 editText에 android : imeOptions = "actionNext" 태그를 사용해보십시오 . softKeyboard의 Next를 클릭하면 자동으로 다음 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

당신이 여러 사용하려는 경우 EditText와를 imeOptions시도 :

android:inputType="textImeMultiLine"

1

편집 텍스트에 inputType을 추가하고 입력하면 다음 편집 텍스트로 이동합니다.

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

간단한 방법 :

  • 다음 편집 텍스트로 커서 자동 이동
  • 편집 텍스트가 마지막 입력 인 경우-> 숨겨진 키보드

이것을 .xml 파일의 편집 텍스트 필드에 추가하십시오.

android:inputType="textCapWords"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.