Android 에서 EditText View를 사용하다보면, 

focus 가 EditText View 에 가 있어서 cursor 가 깜빡이는 것이 눈에 거슬린다. 


그렇다고 cursor 를 마구 없애버리면,

키 입력이 불편하다. 


이 글에서는 EditText View를 이용하여 성가신(?) cursor을 필요할 때만 보는 방법을 설명한다. 

순서는 다음과 같다. 


1. cursor 를 제거하는 방법 (by java code)

2. 클릭시, 키보드를 enable하는 방법

3. 입력완료후, 다시 cursor를 없애는 방법

4. 전체 코드 (in onCreateView(....)



세부 코드는 다음과 같으며, 다음의 코드는 MainActivity 와 같이 Activity를 상속받은 class에서 구현해야 한다. 

참고로 아래의 코드는 fragment class에서 테스트되었다. 


1. cursor 를 제거 (by java code)

 EditText et = (EditText)view.findViewById(R.id.my_name);

et.setInputType(EditorInfo.TYPE_NULL); // setCursorVisible(false); 도 가능하다.

※ 구글링을 하면 다른 방법들도 더 나오는데, 여기에서는 코드를 통한 방법만 설명한다.


2. 클릭시, 키보드를 enable하는 방법

onClickListener를 통해 키 입력시, input type을 변경한다.


et.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ((EditText)view).setInputType(EditorInfo.TYPE_CLASS_TEXT); // setCursorVisible(true); 도 가능하다. }

});


3. 입력 완료후, 다시 disable한다. 


  et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                    String inText = textView.getText().toString();
                    // Do Something... 
                    textView.setInputType(EditorInfo.TYPE_NULL);// setCursorVisible(true); 도 가능하다.
                    return true;
            }
  });

※ OnEditorActionListener(...) 는 키 입력 완료 이후에 발생하는 event이다. 



4. 전체코드

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {

View view = inflater.inflate(R.layout.fragment_search_devices, container, false);

EditText et = (EditText)view.findViewById(R.id.my_name);

et.setInputType(EditorInfo.TYPE_NULL);
et.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((EditText)view).setInputType(EditorInfo.TYPE_CLASS_TEXT);
}
});

et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
String inText = textView.getText().toString();
// Do Something...


textView.setInputType(EditorInfo.TYPE_NULL);

return true;
}
});


return view;
}