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 |