이 튜토리얼에서는 안드로이드에서 EditText 입력 필드에 최솟값(MIN)과 최댓값(MAX)을 정의하는 방법을 알아봅니다.
EditText는 기본적으로 숫자 입력 범위를 제한하는 기능을 제공하지 않습니다. 따라서 InputFilter 인터페이스를 구현한 커스텀 필터 클래스를 만들어 허용할 숫자 범위를 직접 지정해야 합니다. 이번 예제에서는 1~99 사이의 숫자만 입력할 수 있도록 구현하겠습니다.
1단계: 새 프로젝트 생성
Android Studio에서 File ⇒ New Project 메뉴로 이동한 후, 새 프로젝트 생성에 필요한 정보를 모두 입력하여 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 다음 코드를 추가합니다. 숫자만 입력받도록 inputType="number"를 설정한 EditText 하나를 배치합니다.
<? xml version= "1.0" encoding= "utf-8" ?> <RelativeLayout xmlns: android = "https://schemas.android.com/apk/res/android" xmlns: tools = "https://schemas.android.com/tools" android :layout_width= "match_parent" android :layout_height= "match_parent" android :layout_margin= "16dp" tools :context= ".MainActivity" > <EditText android :id= "@+id/editText" android :layout_width= "match_parent" android :layout_height= "wrap_content" android :hint= "Enter number between 1-99" android :inputType= "number" tools :ignore= "Autofill" /> </RelativeLayout>
3단계: MinMaxFilter 클래스 작성
src/MinMaxFilter.java 파일에 다음 코드를 추가합니다. 이 클래스가 실제로 입력된 값이 지정한 범위 내에 있는지 검사하는 핵심 로직입니다. 생성자를 통해 최솟값과 최댓값을 전달받고, filter() 메서드에서 범위를 벗어난 입력은 빈 문자열("")을 반환하여 차단합니다.
package app.tutorialspoint.com.sample ;
import android.text.InputFilter ;
import android.text.Spanned ;
public class MinMaxFilter implements InputFilter {
private int mIntMin , mIntMax ;
public MinMaxFilter ( int minValue , int maxValue) {
this . mIntMin = minValue ;
this . mIntMax = maxValue ;
}
public MinMaxFilter (String minValue , String maxValue) {
this . mIntMin = Integer. parseInt (minValue) ;
this . mIntMax = Integer. parseInt (maxValue) ;
}
@Override
public CharSequence filter (CharSequence source , int start , int end , Spanned dest ,int dstart , int dend) {
try {
int input = Integer. parseInt (dest.toString() + source.toString()) ;
if (isInRange( mIntMin , mIntMax , input))
return null;
} catch (NumberFormatException e) {
e.printStackTrace() ;
}
return "" ;
}
private boolean isInRange ( int a , int b , int c) {
return b > a ? c >= a && c <= b : c >= b && c <= a ;
}
}
4단계: MainActivity 작성
src/MainActivity.java 파일에 다음 코드를 추가하고, setFilters() 메서드를 통해 EditText에 MinMaxFilter를 적용합니다. 여기서는 최솟값 1, 최댓값 99를 지정했습니다.
package app.tutorialspoint.com.sample ;
import android.os.Bundle ;
import android.support.v7.app.AppCompatActivity ;
import android.text.InputFilter ;
import android.widget.EditText ;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState) ;
setContentView(R.layout. activity_main ) ;
EditText editText = findViewById(R.id. editText ) ;
editText.setFilters( new InputFilter[]{ new MinMaxFilter( "1" , "99" )}) ;
}
}
5단계: AndroidManifest.xml 작성
androidManifest.xml 파일에 다음 코드를 추가합니다. 이 예제는 특별한 권한 없이 동작하므로, 기본적인 애플리케이션과 액티비티 선언만 포함됩니다.
<? xml version= "1.0" encoding= "utf-8" ?> <manifest xmlns: android = "https://schemas.android.com/apk/res/android" package= "app.tutorialspoint.com.sample" > <application android :allowBackup= "true" android :icon= "@mipmap/ic_launcher" android :label= "@string/app_name" android :roundIcon= "@mipmap/ic_launcher_round" android :supportsRtl= "true" android :theme= "@style/AppTheme" > <activity android :name= ".MainActivity" > <intent-filter> <action android :name= "android.intent.action.MAIN" /> <category android :name= "android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 모바일 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 실행 옵션 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 앱의 기본 화면이 표시됩니다.
앱이 실행되면 EditText에 1~99 범위를 벗어나는 숫자(예: 0 또는 100 이상)는 입력되지 않고 자동으로 차단되는 것을 확인할 수 있습니다. 이처럼 InputFilter를 활용하면 별도의 유효성 검사 코드 없이도 간편하게 입력 값의 범위를 제어할 수 있습니다.
