我有一个Activity,我希望软件键盘可以打开。如何在BACK键盘打开后关闭活动?现在我必须单击BACK两次,首先关闭键盘,然后完成Activity。
答案 0 :(得分:6)
如上所述,onKeyPreIme可用于捕获后退按钮,但这需要在文本视图上重写,而不是在活动中。
这是一个完整的解决方案:
首先,从EditText派生的新类覆盖onKeyPreIme并调用回调接口:
// EditTextWithBackButton class
public class EditTextWithBackButton extends EditText
{
public interface IOnBackButtonListener
{
boolean OnEditTextBackButton();
}
public EditTextWithBackButton(Context context)
{
super(context);
}
public EditTextWithBackButton(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public void setOnBackButtonListener(IOnBackButtonListener l)
{
_listener = l;
}
IOnBackButtonListener _listener;
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event)
{
if (event.getAction()==KeyEvent.ACTION_UP && keyCode==KeyEvent.KEYCODE_BACK)
{
if (_listener!=null && _listener.OnEditTextBackButton())
return false;
}
return super.onKeyPreIme(keyCode, event); //To change body of overridden methods use File | Settings | File Templates.
}
}
接下来,更新您的布局:
<com.yournamespace.whatever.EditTextWithBackButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textField"
/>
接下来,在setContentView:
之后,在OnCreate中更新您的活动((EditTextWithBackButton) findViewById(R.id.textField)).setOnBackButtonListener(new EditTextWithBackButton.IOnBackButtonListener()
{
@Override
public boolean OnEditTextBackButton()
{
finish();
return true;
}
});
答案 1 :(得分:3)
使用 onKeyPreIme(int keyCode,KeyEvent event)方法并检查 KeyEvent.KEYCODE_BACK 事件。没有做任何花哨的编码就很简单。
答案 2 :(得分:1)
我不相信你需要听众setOnBackButtonListener,因为它已经被首次提出。
我通过使用getContext()来实现它的工作:
public class EditedText extends EditText {
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event){
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){
Activity activity = (Activity) getContext();
activity.finish();
return true;
}
return super.onKeyPreIme(keyCode, event);
}
}
请注意,由于该活动已被处理,我将返回true而不是错误,因为在之前的答案中首次提出这一点。
答案 3 :(得分:0)
您可以使用以下
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyUp(keyCode, event);
}
答案 4 :(得分:0)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
但是告诉你一件事你必须付出额外的努力来检测键盘是否打开,而不是使用可以用来决定是回去还是完成活动的旗帜
答案 5 :(得分:0)
为您提供软键盘的活动中的EditText设置一个OnEditorActionListener,如下所示,
editText.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (event != null
&& (event.getKeyCode() == KeyEvent.KEYCODE_BACK)) {
finish();
}
return false;
}
});