2015-09-12 2 views
2

Я хочу закончить действие, когда открыта мягкая клавиатура, я хочу переопределить заднее событие мягкой клавиатуры и завершить работу.OnBackPressed с SoftKeyboard open

Я использую это, но он не работает, никакой идеи?

public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && 
       event.getAction() == KeyEvent.ACTION_UP) { 
      this.finish(); 
      return false; 
     } 
     return super.dispatchKeyEvent(event); 
    } 

ответ

2

onKeyDown() и onBackPressed() не работает в этом случае. Вы должны использовать onKeyPreIme.

Первоначально вы должны создать собственный текст редактирования, который расширяет EditText. И тогда вы должны реализовать метод onKeyPreIme, который контролирует KeyEvent.KEYCODE_BACK. После этого один назад достаточно, чтобы решить вашу проблему. Это решение работает для меня отлично.

CustomEditText.java

public class CustomEditText extends EditText { 

    Context context; 

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

    @Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      // User has pressed Back key. So hide the keyboard 
      InputMethodManager mgr = (InputMethodManager)   
       context.getSystemService(Context.INPUT_METHOD_SERVICE); 
      mgr.hideSoftInputFromWindow(this.getWindowToken(), 0); 
      // TODO: Hide your view as you do it in your activity 
     } 
     return false; 
} 

В вашем XML

<com.YOURAPP.CustomEditText 
    android:id="@+id/CEditText" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"/> 

В вашей деятельности

public class MainActivity extends Activity { 
    private CustomEditText editText; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     editText = (CustomEditText) findViewById(R.id.CEditText); 
    } 
} 
Смежные вопросы