Обнаружить обратное событие на клавиатуре Android - PullRequest
10 голосов
/ 14 января 2012

У меня есть некоторые намерения внутри контроллера вкладок, и для одного из них у меня есть текст редактирования, который мне нужно знать наверняка, когда он имеет фокус и когда он теряет этот фокус. Я сопоставил большинство событий, таких как слушатель фокуса, OnEditorActionListener и т. Д., Теперь моя единственная проблема, которая остается, состоит в том, что, когда у меня есть фокус, появляется программная клавиатура, и я хочу закрыть ее: 1) кнопкой «Готово», а не кнопкой «Назад» на телефоне (отключите кнопку «Назад», чтобы закрыть клавиатуру, когда она видна) 2) обнаружение события кнопки назад, когда клавиатура видна, чтобы я мог передать фокус на какой-то другой элемент управления.

Я пробовал несколько способов, но безуспешно, например onBackPressed, onConfigurationChanged (добавить hiddenKeyboard в манифесте), key_down для активности и т. Д., Но безуспешно.

Кто-нибудь преуспел в этом? Практически я хочу, чтобы когда клавиатура была видна, и я нажимаю обратно на телефоне, мой текст редактирования теряет фокус (otherControl.requestFocus ->, который является относительным макетом).

Ответы [ 3 ]

10 голосов
/ 10 июня 2014

Старая тема, но здесь ожидаемый ответ

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
        Toast.makeText(getContext(), "BACK", Toast.LENGTH_SHORT).show();
        return true;
    }
    return super.onKeyPreIme(keyCode, event);
}

Вы должны поместить это в класс, который переопределяет EditText (класс MyEditText расширяет EditText ...)

4 голосов
/ 31 октября 2016

Вот способ записи события нажатия клавиши: 1. Экстент представления editText для переопределения onKeyPreIme

package com.test.test;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.EditText;

/**
 * Created by sumit.saurabh on 11/10/16.
 */

public class ChatEditText extends EditText
{
    /* Must use this constructor in order for the layout files to instantiate the class properly */
    public ChatEditText(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    private KeyImeChange keyImeChangeListener;

    public void setKeyImeChangeListener(KeyImeChange listener)
    {
        keyImeChangeListener = listener;
    }

    public interface KeyImeChange
    {
        public void onKeyIme(int keyCode, KeyEvent event);
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event)
    {
        if (keyImeChangeListener != null)
        {
            keyImeChangeListener.onKeyIme(keyCode, event);
        }
        return false;
    }
}

2.ChatEditText в формате xml

<com.test.test.ChatEditText
    android:id = "@+id/messageEditText"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_gravity = "bottom"
    android:layout_marginLeft = "12dp"
    android:layout_marginRight = "30dp"
    android:background = "@null"
    android:hint = "Type your message"
    android:inputType = "textMultiLine"
    android:singleLine = "false"
    android:textColorHint = "#c4c0bd"
    android:textSize = "18sp"/>

3.Затем присоедините слушателя из любого места, например:

 private ChatEditText messageEditText;
    messageEditText =
       (ChatEditText) findViewById(R.id.messageEditText);
messageEditText.setKeyImeChangeListener(new ChatEditText.KeyImeChange(){
    @Override
    public void onKeyIme(int keyCode, KeyEvent event)
    {
        if (KeyEvent.KEYCODE_BACK == event.getKeyCode())
        {
            // do something
        }
    }});
2 голосов
/ 14 января 2012

вот оно

 @Override
public boolean dispatchKeyEvent(KeyEvent event) {
      if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)
     {  //do you back event work here
           }    
    return super.dispatchKeyEvent(event);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...