Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测android键盘上的返回事件_Android_Android Softkeyboard - Fatal编程技术网

检测android键盘上的返回事件

检测android键盘上的返回事件,android,android-softkeyboard,Android,Android Softkeyboard,我在选项卡控制器中有一些意图,其中一个我有一个编辑文本,我需要确定它何时有焦点,何时失去焦点。 我已经映射了大多数事件,如focus listener、OnEditorActionListener等,现在我唯一剩下的问题是,当我有focus时,软键盘出现,我想关闭它: 1) 通过手机上的“完成”按钮而不是“后退”按钮(禁用“后退”按钮可在键盘可见时关闭键盘) 2) 在键盘可见时检测后退按钮事件,以便将焦点传递给其他控件 我尝试了多种方法,但都没有成功,比如onBackPressed、onConf

我在选项卡控制器中有一些意图,其中一个我有一个编辑文本,我需要确定它何时有焦点,何时失去焦点。 我已经映射了大多数事件,如focus listener、OnEditorActionListener等,现在我唯一剩下的问题是,当我有focus时,软键盘出现,我想关闭它: 1) 通过手机上的“完成”按钮而不是“后退”按钮(禁用“后退”按钮可在键盘可见时关闭键盘) 2) 在键盘可见时检测后退按钮事件,以便将焦点传递给其他控件

我尝试了多种方法,但都没有成功,比如onBackPressed、onConfigurationChanged(在清单中添加hiddenKeyboard)、key_down on activity等等,但都没有成功

有人成功了吗?实际上,我希望当键盘可见并且我在手机上按back时,我的编辑文本失去焦点(otherControl.requestFocus->这是一个相对布局)。

在这里

 @Override
public boolean dispatchKeyEvent(KeyEvent event) {
      if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)
     {  //do you back event work here
           }    
    return super.dispatchKeyEvent(event);
}

老话题,但这里是预期的答案

@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…

以下是捕获返回按键事件的方法:1。要覆盖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;
    }
}
二,。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"/>

让我看看你迄今为止都做了些什么。这是一个txtSearchBar.setOnEditorActionListener(新的EditText.OnEditorActionListener(){公共布尔onEditorAction(TextView v,int actionId,KeyEvent){如果(event.getKeyCode()==KEYCODE_BACK){layoutFocus.requestFocus();}返回false;}});2.onBackPressed上的方法2,layoutFocus.requestFocus();3.在此活动的清单中添加hiddenKeyboard,并将@Override public void OnConfiguration更改(Configuration newConfig)无法添加更多代码,因为如果我的声誉超过100分,我无法回答我的问题:)您可以编辑您的问题并在那里发布代码only@Catalin:u r试图劫持本机android用户体验,有一种方法,但是,用户不会喜欢你的应用程序的这种行为。谢谢你的代码,但不幸的是它不起作用:(使用你的方法,只有当软键盘已经隐藏时(在我按下“完成”按钮后),后退键才会被捕获)然后它退出程序。当显示键盘时,我按back键,它执行键盘隐藏,但不执行此方法。我在android 2.2和2.3上测试Yes,因为当你按back键,键盘打开时,只有键盘活动才会监听,它会返回,当且仅当用户按b键时,你才能监听back事件确认您的活动,在本例中为键盘活动收听此返回事件..有没有办法从键盘活动中跟踪返回?或者有没有办法在键盘启动时禁用返回按钮以使其工作?有没有办法,例如对编辑文本进行子类化并更改某些内容?有没有可能?是的,您可以阻止本机键盘,创建自己的自定义软件键盘,然后在后按键上做任何你想做的事情。这并不是那么复杂,但有些棘手。我知道这是可以做到的。在自定义键盘上做一些谷歌搜索,你就可以完成它。
 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
        }
    }});