투케이2K

61. (AndroidStudio/android/java) setOnFocusChangeListener 사용해 editText 포커스 관리 실시 - hint 활성 및 비활성 처리 본문

Android

61. (AndroidStudio/android/java) setOnFocusChangeListener 사용해 editText 포커스 관리 실시 - hint 활성 및 비활성 처리

투케이2K 2021. 2. 25. 08:37

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

 

// ======= [AndroidManifest.xml 파일] ======= 
<activity
            android:name=".A_Main"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan"/>
<!-- 1) android:screenOrientation="portrait" 항상 앱 화면을 세로 표시하겠다-->
<!-- 2) android:windowSoftInputMode="adjustPan" 키보드에 의해 EditText 가 가려지지 않도록 위쪽으로 이동하겠다-->



// ======= [A_Main 액티비티] ======= 
//TODO [전역변수 선언]
EditText name;
EditText phone;

//TODO [컴포넌트 매칭]
name = (EditText)findViewById(R.id.name);
phone = (EditText)findViewById(R.id.phone);

//TODO [editText 포커스 관리]
name.setOnFocusChangeListener(new View.OnFocusChangeListener() {
	@Override
	public void onFocusChange(View v, boolean hasFocus) {
		if(hasFocus){ //TODO 포커스가 활성화 된 경우
			name.setHint(""); //힌트 초기화 실시
		}
		else { //TODO 포커스가 비활성화 된 경우
			String value = name.getText().toString();
			if(value.length() <= 0 && value.equals("") == true){ //널일경우
				name.setHint("실명을 입력하세요");
			}
		}
	}
});

phone.setOnFocusChangeListener(new View.OnFocusChangeListener() {
	@Override
	public void onFocusChange(View v, boolean hasFocus) {
		if(hasFocus){ //TODO 포커스가 활성화 된 경우
			phone.setHint(""); //힌트 초기화 실시
		}
		else { //TODO 포커스가 비활성화 된 경우
			String value = name.getText().toString();
			if(value.length() <= 0 && value.equals("") == true){ //널일경우
				phone.setHint("연락처를 입력하세요");
			}
		}
	}
});


//TODO [ 외부 바깥 레이아웃 클릭 시 키보드 내림 ]
@Override
public boolean dispatchTouchEvent(MotionEvent event){
	int action = event.getAction();
	switch(action){
		case(MotionEvent.ACTION_DOWN):
			//======창 내리는 용도======
			InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
			imm.hideSoftInputFromWindow(name.getWindowToken(), 0);
			imm.hideSoftInputFromWindow(phone.getWindowToken(), 0);
			//======================
			break;
		case(MotionEvent.ACTION_MOVE):			
			break;
		default:
			break;
	}
	return super.dispatchTouchEvent(event);
}



// ======= [xml 레이아웃 파일] ======= 
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:id="@+id/parent">
    <!--    [editText 사용시 자동 포커스 활성 방지]-->
    <!--    android:focusable="true"-->
    <!--    android:focusableInTouchMode="true"-->
    <!--    android:id="@+id/parent"-->

    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text=""
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:textSize="20dp"
        android:gravity="center"
        android:hint="실명을 입력하세요"
        android:background="#444444"
        android:singleLine="true"
        android:nextFocusDown="@+id/phone"/>
    <!--    [editText 사용시 자동 포커스 활성 방지]-->
    <!--    android:singleLine="true" : 한줄로만 표시하겠다-->
    <!--    android:nextFocusDown="@+id/phone" : 엔터키 입력 시 포커스 이동-->

    <EditText
        android:id="@+id/phone"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:text=""
        android:textColor="#ffffff"
        android:textStyle="bold"
        android:textSize="20dp"
        android:gravity="center"
        android:hint="연락처를 입력하세요"
        android:background="#dddddd"
        android:singleLine="true" />

</LinearLayout>

/* =========================== */

반응형
Comments