728x90
안드로이드에서 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 위젯에 적용한다.
<com.sample.BackPressedEditText
android:id="@+id/edit"
android:layout_width="303px"
android:layout_height="90px"
android:hint="@string/gogo"
android:textSize="30px" />
응용하기
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() {//비워놔도 된다.}
728x90
'Mobile > Android' 카테고리의 다른 글
[Android] 휴대 전화번호 형식 하이픈(-) 자동 치환 코드 (0) | 2021.12.09 |
---|---|
[Android] 커스텀 리스트 뷰 AdapterView.OnItemClickListener 리스터 동작 안할때 (0) | 2021.11.29 |
[Android] ADB Install 중 INSTALL_FAILED_ALREADY_EXISTS 에러 발생 했을 때 (0) | 2021.09.15 |
[Android] SharedPreferences로 값 저장하고 불러오기 (0) | 2021.09.10 |
[Android] adb logcat 명령어 (0) | 2021.09.07 |
댓글