[Android] EditText

728x90

 

- 사용자에게 문자열 데이터를 입력 받을 때 사용하는 View 

주요 속성

- text : Edit Text에 표시할 문자열 설정

- hint : 입력된 값이 없을 경우 표시할 안내 문구

- inputType : 입력 값에 대해 설정. 표시되는 형식, 나타나는 키보드 등에 영향을 줌

--> 키보드의 형식만 바꿀 뿐이지 입력까지 제한을 두는 것은 아니기 때문에 Number로 설정 하더라도 사용자가 텍스트를 복사/붙여넣기하면 입력이 가능, 코드를 통해 입력하는것도 입력이 가능하기 때문에 유효성검사기 필요함

- imeOptions : 나타나는 키보드의 Enter 키 모양 설정

--> actionSearch 를 선택하는 경우 엔터창이 돋보기 모양으로 바뀌지만 실제로 검색 기능이 구현되어 있는 것은 아니기 때문에 별도로 구현 해 줘야함 

 

 

- 포커스를 주려면 Ed Text 안에 <request-focus/> 넣어주면 됨 --> 포커스가 문자열을 입력 해 주세요 보다 앞에 있음 

    <EditText
        android:id="@+id/editTextText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="문자열을 입력 해 주세요"
        android:imeOptions="actionSearch"
        android:inputType="text">
        <requestFocus/>
    </EditText>

혹은 코드에서 포커스 부여 --> 포커스가 문자열을 입력 해 주세요 보다 뒤에 있음 (화면 로드 후 포커스를 줘서) (추천)

activityMainBinding.editTextText.requestFocus();

 

키보드 올리기 
        //키보드 올리기
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.showSoftInput(getCurrentFocus(), 0);

코드 단에서 키보드 올리기를 주면, Oncreate 메서드가 끝나기 전에 키보드가 나타나라고 명령을 주기 때문에, 키보드는 올라가려고하지만

그 이후에 화면이 새롭게 떴기 때문에 키보드가 나타나지 않음 --> 쓰레드 사용하면 해결 가능

package kr.co.edittext;

import android.os.Bundle;
import android.os.SystemClock;
import android.view.inputmethod.InputMethodManager;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import kr.co.edittext.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
    ActivityMainBinding activityMainBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());

        activityMainBinding.editTextText.requestFocus();

        ShowKeyBoardThread thread = new ShowKeyBoardThread();
        thread.start();
        
        setContentView(activityMainBinding.getRoot());
    }

    class ShowKeyBoardThread extends  Thread {
        @Override
        public void run() {
            super.run();
            SystemClock.sleep(500); //500Ms 쉬었다가 아래 코드 동작

            //키보드 올리기
            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            imm.showSoftInput(getCurrentFocus(), 0);


        }
}

 

        public void hideKeyBoard() {
        //  InputMethodManager 에서 키보드를 관장할 수 있는 get을 추출할 수 있음
            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            //getWindowToken 으로 아이바인더 객체를 추출 
            // 아이바인더 : 무언가를 연결 할 수 있는 요소
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

            //포커스 해제
            getCurrentFocus().clearFocus();
        }

 

EditText의 이벤트

- textWatcher : 사용자가 입력한 내용을 실시간으로 감시

public class MainActivity extends AppCompatActivity {
    ActivityMainBinding activityMainBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());


        //입력 감시자
        EditTextWatcher1 editTextWatcher1 = new EditTextWatcher1();
        activityMainBinding.editTextText.addTextChangedListener(editTextWatcher1);
        
        ...


//editText에 입력한 내용을 실시간으로 감시하는 왓처
    class EditTextWatcher1 implements TextWatcher {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        //입력 내용이 변하기 전

        }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            //입력 내용이 변경 했을 때 

            }

            @Override
            public void afterTextChanged(Editable s) {
            //입력 내용이 변경한 후 
            }

            }

 

- EditorAction : 키보드 엔터키 눌렀을 때 발생하는 이벤트 

public class MainActivity extends AppCompatActivity {
    ActivityMainBinding activityMainBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());

        activityMainBinding.editTextText.requestFocus();

        ShowKeyBoardThread thread = new ShowKeyBoardThread();
        thread.start();

        //입력 감시자
        EditTextWatcher1 editTextWatcher1 = new EditTextWatcher1();
        activityMainBinding.editTextText.addTextChangedListener(editTextWatcher1);
        
        //엔터 리스너
        EditTextEnterListener editTextEnterListener = new EditTextEnterListener();
        activityMainBinding.editTextText.setOnEditorActionListener(editTextEnterListener);

        setContentView(activityMainBinding.getRoot());
    }


...

    //엔터키 눌렀을 떄
    class EditTextEnterListener implements TextView.OnEditorActionListener{
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            String str1 = activityMainBinding.editTextText.getText().toString();
            activityMainBinding.editTextText.setText("엔터 누름");
            hideKeyBoard();
            return true;
        }
    }
728x90

'안드로이드 스튜디오' 카테고리의 다른 글

[Android] ImageView  (1) 2026.02.02
[Android] TextInputLayout  (0) 2025.12.19
[Android] Button  (0) 2025.11.15
[Android] TextView  (0) 2025.11.15
[Android] MainActivity로 돌아오기 실습  (1) 2025.06.19