티스토리 뷰

에디트텍스트를 갖고있는 부모 뷰에 


android:focusable="true"
android:focusableInTouchMode="true"

 

속성을 추가한 뒤 

 

특정 이벤트에 

view.requestFocus();

을 주면 에디트텍스트의 포커스를 뻇을 수 있다, 

자매품으로 

editText.setCursorVisible(false);

으로 안보이게 처리 할 수 있다. 

 

 

 

키보드 올라왔을 때 백버튼 감지하기.

 

아래와 같은 클래스를 추가해준 뒤 사용하여야 하는 에디트텍스트를 아래 클래스로 만들어준다. 

 

public class BackPressEditText extends android.support.v7.widget.AppCompatEditText {
private OnBackPressListener mListener;


public BackPressEditText(Context context)
{
super(context);
}


public BackPressEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
}


public BackPressEditText(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}


@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mListener != null) {
mListener.onBackPress(keyCode);
}

return super.onKeyPreIme(keyCode, event);
}


public void setOnBackPressListener(OnBackPressListener listener) {
mListener = listener;
}

public interface OnBackPressListener {
public void onBackPress(int keyCode);
}
}

 

 

 

그런 다음 백버튼을 감지 할 곳에서 

 

editText.setOnBackPressListener(new BackPressEditText.OnBackPressListener() {
@Override
public void onBackPress(int keyCode) {
// editText.setCursorVisible(false);
view.requestFocus();
}
});

 

이 코드를 통해 감지하도록 한다. 

 

 

위 기능을 구현할 때 

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

코드를 사용하여 키보드도 함께 내려주는 것이 좋다.

 

 

----------

키보드 내에 존재하는 확인, 완료 버튼 감지는

 editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == KeyEvent.KEYCODE_ENDCALL) {
// editText.setCursorVisible(false);
view.requestFocus();

InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

}
return false;
}
});

 

 

이 코드로 감지한다.