[Android] TextInputLayout

728x90

 

TextInputLayout

- Edit Text를 보완한 View

- Edit Text의 속성, 이벤트, 프로퍼티 등을 그대로 사용하며 몇 가지 요소가 추가 됨 

 

주요 속성

- hint : 원래 입력한 내용이 없으면 보여줄 문자열의 의미를 갖지만 TextInputLayout에서는 안내문구 용도로 사용함.
            입력한 내용이 있으면 사라지지 않고 상단으로 이동 

- counterEnabled : 입력한 글자의 수가 나타남

- counterMaxLength : 지정한 글자수를 넘으면 붉은색으로 표시해줌

 

 

 

 

주요 메서드

- getEditText : TextInputLayout이 가지고 있는 Edit Text 객체의 주소값 

- setError : 오류로 표시할 메세지를 설정

 

* getEditText

(1) TextInputLayout의 id를 지정해준다.

 

<?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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="안내문구입니다."
        app:counterEnabled="true"
        app:counterMaxLength="5">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint" />
    </com.google.android.material.textfield.TextInputLayout>

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="문자열 가져오기" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

</LinearLayout>
package kr.co.textinputlayout;

import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

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.textinputlayout.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding activityMainBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(activityMainBinding.getRoot());

        ButtonClickListner1 buttonClickListner1 = new ButtonClickListner1();
        activityMainBinding.button4.setOnClickListener(buttonClickListner1);

        EditTextWatcher editTextWatcher = new EditTextWatcher();
        EditText editText = activityMainBinding.text1.getEditText();
        editText.addTextChangedListener(editTextWatcher);
    }


    class ButtonClickListner1 implements View.OnClickListener{
        @Override
        public void onClick(View v) {

            //TextInputLayout에 입력된 문자열을 가져온다.
            EditText editText = activityMainBinding.text1.getEditText();
            String str1 = editText.getText().toString();
            activityMainBinding.textView.setText(str1);

            //키보드 내리기
            InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

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

    class EditTextWatcher 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) {

            //.setError 에다가 메세지 넣으면 에러메세지 형태로 보여주고, null넣으면 없애줌
            if(s.length() > 5){
                activityMainBinding.text1.setError("5자 이내로 입력해주세요.");
            }else{
                activityMainBinding.text1.setError(null);
            }
        }
    }
}

 

 

 

 

728x90

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

[Android] ToggleButton  (0) 2026.02.02
[Android] ImageView  (1) 2026.02.02
[Android] EditText  (0) 2025.11.18
[Android] Button  (0) 2025.11.15
[Android] TextView  (0) 2025.11.15