Android
[안드로이드] android keypad 내의 Done(enter,search,...) 눌렀을 경우 이벤트
누르님
2017. 5. 14. 00:27
기본적으로 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; } });