on
[Android] EditText 작업 중 Softkeyboard(키보드) 띄워져있는 중...
[Android] EditText 작업 중 Softkeyboard(키보드) 띄워져있는 중...
안드로이드에서 EditText 작업 중 키보드를 항상 띄워 놓고 싶을 때 Back키가 눌렸을때의 이벤트를 상쇄시키는 방법이다.
1. EditText 확장시키기
EditText의 기능을 확장시켜 Back키에 대해 처리할 코드를 추가한다.
BackPressedEditText.java
import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; public class BackPressedEditText extends androidx.appcompat.widget.AppCompatEditText { public BackPressedEditText( Context context ) { super( context ); } public BackPressedEditText( Context context, AttributeSet attribute_set ) { super( context, attribute_set ); } public BackPressedEditText( Context context, AttributeSet attribute_set, int def_style_attribute ) { super( context, attribute_set, def_style_attribute ); } @Override public boolean onKeyPreIme( int key_code, KeyEvent event ) { if ( key_code == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP ) return true; return super.onKeyPreIme( key_code, event ); } }
2. xml에 적용하기
확장한 EditText 클래스를 xml 위젯에 적용한다.
응용하기
3. 소프트키보드를 내리지 않고 코드 처리하기
set 메소드를 따로 만들어서 값을 받아온 뒤, 그 값을 이용해 키보드를 내리지 않고 처리한다.
적용된 EditText마다 객체가 따로 생성되어 있기 때문에 값을 다르게 주면, 결과가 전부 다르게 작용한다.
BackPressedEditText.java
import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import com.mtx.app.pbv01.listener.OnButtonSelectedListener; public class BackPressedEditText extends androidx.appcompat.widget.AppCompatEditText { public OnListener listener; public String fName = null; public BackPressedEditText(Context context) { super(context); } public BackPressedEditText(Context context, AttributeSet attribute_set) { super(context, attribute_set); } public BackPressedEditText(Context context, AttributeSet attribute_set, int def_style_attribute) { super(context, attribute_set, def_style_attribute); } public void backward(String name) { //외부에서 받아올 값을 저장하는 set 메소드 fName = name; } @Override public boolean onKeyPreIme(int key_code, KeyEvent event) { if (key_code == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { //처리할 코드 넣기 if (fName != null) { listener = (OnListener) super.getContext(); listener.onListener(fragmentName); } return true; //반드시 True 리턴하기 } return super.onKeyPreIme(key_code, event); } }
아래는 값을 전달하는 코드와 실제 처리하는 부분이다.
MainActivity.java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); back_editText = (BackPressedEditText) findViewById(R.id.back_edit); //set메소드를 통해 값 전달 back_editText.backward = fname; } @Override public void onBackPressed() {//비워놔도 된다.}
from http://cmeaning.tistory.com/29 by ccl(S) rewrite - 2021-11-11 06:28:27