Cat*_*lin 10 android android-softkeyboard
我在选项卡控制器中有一些意图,其中一个我有一个编辑文本,我需要知道它何时有焦点,何时失去了这个焦点.我制订最喜欢的焦点侦听器,OnEditorActionListener等等,现在我唯一的问题仍然是事件的是,当我有集中出现的软键盘,我想要么关闭:通过完成按钮,而不是由1)在手机上后退按钮(禁用后退按钮来关闭键盘,而键盘是可见的)2)检测后退按钮事件,而键盘是可见的,这样我可以通过焦点到其他一些控制.
我曾尝试多种方法,但没有成功,像onBackPressed,onConfigurationChanged(在清单中添加hiddenKeyboard),key_down的活动和等,但没有成功.
有人成功吗?实际上,我想当键盘可见时,我按回电话,我的编辑文本失去焦点(otherControl.requestFocus - >这是一个相对布局).
Hrk*_*Hrk 10
老话题,但这是预期的答案
@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);
}
Run Code Online (Sandbox Code Playgroud)
你应该将它放在一个覆盖EditText的类中(类MyEditText扩展EditText ...)
这是捕获返回按键事件的方法: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;
}
}
Run Code Online (Sandbox Code Playgroud)
2. xml中的ChatEditText
<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"/>
Run Code Online (Sandbox Code Playgroud)
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
}
}});
Run Code Online (Sandbox Code Playgroud)
这里是
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_BACK)
{ //do you back event work here
}
return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8762 次 |
| 最近记录: |