안드로이드 프로그램에서 제일 많이 사용하게 되는 View 인터페이스 TextView EditText 이용하여 엔터키 이벤트 사용 방법을 알아 봅니다

엔터키 이벤트는 EditText에서 발생 하는데 여러가지 key event 들이 발생 하면 그중 enter event 선택하여 처리를 하는 것으로 2가지 방법을 이용하게 됩니다. 하나는 EditText 생성시 직접 이벤트 처리를 부여하는 방법이고 다른 하나는 implements 사용하여 OnKeyListener 상속받아 처리하는 방법 입니다최종 구현 상태는 아래 그림과 같습니다.


android enter key



1. 프로젝트 생성


실제로 프로젝트를 생성해 보도록 하겠습니다.


android enter key


Empty Activity 선택 하고


android enter key

 

적당한 프로젝트 명을 입력 합니다신규로 추가하는 프로그램 없이 프로젝트 생성시 기본적으로 생성되는 파일을 이용하여 구현합니다.

 

2. Layout 구현

 

먼저 activity_main.xml파일에 EditText 2 추가해 줍니다. id 적당히 입력을 해주면 됩니다하나는 생성할때 이벤트 처리 기능을 부여 하고 다른 하나는 OnKeyListener 이용한 처리에 사용하게 됩니다.

<TextView

        android:id="@+id/plain_text"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="hello world"

        app:layout_constraintBottom_toBottomOf="parent"

        app:layout_constraintLeft_toLeftOf="parent"

        app:layout_constraintRight_toRightOf="parent"

        app:layout_constraintTop_toTopOf="parent" />

 

    <EditText

        android:id="@+id/plain_text_input"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="112dp"

        android:hint="text1"

        android:inputType="text"

        app:layout_constraintTop_toTopOf="parent"

        tools:layout_editor_absoluteX="27dp" />

 

    <EditText

        android:id="@+id/plain_text_input2"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="168dp"

        android:hint="text2"

        android:inputType="text"

        app:layout_constraintTop_toTopOf="parent"

        tools:layout_editor_absoluteX="0dp" />

 

 

3. Java 기능 구현

 

MainActivity.java 에서 이벤트 처리 로직입니다.


3.1 첫번째 이벤트 처리 방법


첫번째는 onCreate()에서 EditText 생성할 엔터 이벤트 처리 로직을 부여하는 방법 입니다. EditText 생성 하고 바로 onKey() 기능을 추가하여  필요한 작업을 구현하면 됩니다.

@Override

    protected void onCreate(Bundle savedInstanceState) {

eText2 = (EditText) findViewById(R.id.plain_text_input2);

 

eText2.setOnKeyListener(new View.OnKeyListener() {

            @Override

            public boolean onKey(View v, int keyCode, KeyEvent event) {

                switch (keyCode) {

                    case KeyEvent.KEYCODE_ENTER:

                        txtView.setText(eText2.getText());

                        break;

                }

                return true;

            }

        });

}

 

구현된 작업은 EditText 입력한 내용을 TextView 출력 하게 하는 간단한 작업 입니다.

 

3.2 두번째 이벤트 처리 방법


두번째는 OnKeyListener 상속받아 onKey() 구현하는 방법 입니다. class implements OnKeyListener 상속하고 Override onKey() 구현을 하면 됩니다.

public class MainActivity extends AppCompatActivity implements View.OnKeyListener {

 

@Override

protected void onCreate(Bundle savedInstanceState) {

eText1 = (EditText) findViewById(R.id.plain_text_input);

    eText2 = (EditText) findViewById(R.id.plain_text_input2);

}

 

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

         if(keyCode == KeyEvent.KEYCODE_ENTER) {

            switch (v.getId()) {

                case R.id.plain_text_input:

                    txtView.setText(eText1.getText());

                    break;

                case R.id.plain_text_input2:

                    txtView.setText(eText2.getText());

                    break;

            }

            return true;

        }

        return false;

}

 

구현된 내용은 EditText에서 이벤트를 받으면 엔터 이벤인가 확인 하고 2개의 EditText 어디에서 발생 하였는지 확인하여 입력한 내용을 TextView 출력 하게 하는 작업 입니다.

 


android enter key

위에 있는 결과는 두번째 EditText에서 엔터키 이벤트가 발생한것을 있습니다.

 

4. 전체 Source


4.1 activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
   
tools:context=".MainActivity">

    <TextView
       
android:id="@+id/plain_text"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:text="hello world"
       
app:layout_constraintBottom_toBottomOf="parent"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintTop_toTopOf="parent" />

    <EditText
       
android:id="@+id/plain_text_input"
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:layout_marginTop="112dp"
       
android:hint="text1"
       
android:inputType="text"
       
app:layout_constraintTop_toTopOf="parent"
       
tools:layout_editor_absoluteX="27dp" />

    <EditText
       
android:id="@+id/plain_text_input2"
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:layout_marginTop="168dp"
       
android:hint="text2"
       
android:inputType="text"
       
app:layout_constraintTop_toTopOf="parent"
       
tools:layout_editor_absoluteX="0dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

4.2MainAcitivity.java


두가지 기능을 한곳에 담아 보았습니다.

package copycoding.tistory.texttest;

import
androidx.appcompat.app.AppCompatActivity;

import
android.os.Bundle;
import
android.view.KeyEvent;
import
android.view.View;
import
android.widget.EditText;
import
android.widget.TextView;

public class
MainActivity extends AppCompatActivity implements View.OnKeyListener {
    EditText
eText1, eText2;
   
TextView txtView;
   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);

       
eText1 = (EditText) findViewById(R.id.plain_text_input);
       
eText2 = (EditText) findViewById(R.id.plain_text_input2);
       
txtView = (TextView) findViewById(R.id.plain_text);
       
eText1.setOnKeyListener(this);
       
eText2.setOnKeyListener(new View.OnKeyListener() {
           
@Override
           
public boolean onKey(View v, int keyCode, KeyEvent event) {
               
switch (keyCode) {
                   
case KeyEvent.KEYCODE_ENTER:
                       
txtView.setText(eText2.getText());
                        break;
               
}
               
return true;
           
}
        })
;
   
}

   
@Override
   
public boolean onKey(View v, int keyCode, KeyEvent event) {
        
if(keyCode == KeyEvent.KEYCODE_ENTER) {
           
switch (v.getId()) {
               
case R.id.plain_text_input:
                   
txtView.setText(eText1.getText());
                    break;
//                case R.id.plain_text_input2:
//                    txtView.setText(eText2.getText());
//                    break;
           
}
           
return true;
       
}
       
return false;
   
}
}

 

- copy coding - 



+ Recent posts