기본적으로 SearchView 를 사용 할 경우에는 (그림과 같은) Done 버튼이 정삭적으로 사용이 가능하지만

이 ActionBar의 경우는 여러가지 처리를 위해 커스텀으로 만들어졌습니다.

그래서 Done 버튼의 이벤트를 받기 위해서는 별도의 작업을 해줘야 사용이 가능합니다.



EditText (최신 대응은 AppCompatEditText) 를 상속받아 별도의 클래스를 만들어 줍니다. 

public class CustomEditText extends AppCompatEditText {

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

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

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

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        InputConnection conn = super.onCreateInputConnection(outAttrs);
        outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
        return conn;
    }
}


레이아웃 xml 에서 커스텀 eidtText를 정의합니다.

<com.myApplication.CustomEditText
	android:id="@+id/search_view"
	android:layout_width="match_parent"
	android:layout_height="?attr/actionBarSize"
	android:layout_weight="1"
	android:background="@android:color/transparent"
	android:gravity="center_vertical"
	android:hint="@string/txt_search"
	android:imeOptions="actionSearch"
	android:maxLines="1"
	android:paddingLeft="2dp"
	android:textColor="@color/colorActionBar"
	android:textColorHint="@color/colorActionBar" />


마지막으로 Java 코드 내에서 

EditText search_view = (EditText) findViewbyId(R.id.search_view);
search_view.setOnEditorActionListener(new TextView.OnEditorActionListener() {
	@Override
	public boolean onEditorAction(TextView textView, int keyCode, KeyEvent event) {
		Log.e("test","keyEvent "+keyCode);
		// TODO :: work for
		if(keyCode == event.KEYCODE_HOME){
			loadAddress();
		}
		return false;
	}
});


+ Recent posts