我在我的活动中有一个编辑文本。当用户触摸该编辑文本时,键盘已打开。但是在所有的HTC设备中,打开键盘后,当用户按下后退按钮,而不是只隐藏键盘时,我当前的活动结束并显示以前的活动。如何解决这个问题?在所有其他三星手机,这工作正常。但不是在HTC设备。当在android中打开键盘时按下后退按钮时,防止完成活动
0
A
回答
0
您可能会按两次后退按钮,因为我做了同样的事情,但没有遇到类似的问题。我已经在三星和HTC设备上测试过我的代码。
+0
雅这可能是真的..键可能太敏感,并被按两次。 – Kiran 2013-03-21 04:34:40
0
那么这可能只适用于你。您可以检查如果键盘是onBackPressed活动广场,如:
public void onBackPressed() {
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
}
} else {
super.onBackPressed();
}
});
}
,那么你可以先取消键盘就像上面的代码,然后终于再次按下背面你可以回去使用super.onBackPressed ();
0
坦率地说,我非常想说一句,让平台按照用户预期的方式处理它。不过,最近我遇到了类似的问题,虽然它不是最理想的,但它确实允许您在后退按钮到达键盘之前拦截它,并根据需要进行处理。
首先,无论你的ViewGroup布局使用,将其覆盖在类似这样的方式的根本:
IMEInterceptLayout extends LinearLayout {
private OnBackPressedPreIMEListener listener;
public IMEInterceptLayout(Context c) { super(c); }
public IMEInterceptLayout(Context c, AttributeSet attrs) { super(c, attrs); }
public IMEInterceptLayout(Context c, AttributeSet attrs, int style) { super(c, attrs, style); }
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
switch(event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
fireOnBackPressedPreIME();
return true;
default:
return super.dispatchKeyEventPreIme(event);
}
}
public void setOnBackPressedPreIMEListener(OnBackPressedPreIMEListener listener) {
this.listener = listener;
}
private void fireOnBackPressedPreIME() {
if(listener != null) listener.onBackPressedPreIME();
}
public interface OnBackPressedPreIMEListener {
public void onBackPressedPreIME();
}
}
例如如果您使用的是RelativeLayout,请扩展而不是LinearLayout。在你的布局,而不是普通的Android版本,使用该自定义视图:
<LinearLayout
android:id="@+id/my_root_layout"
内容视图设置到此布局后成为
<com.my.packagename.IMEInterceptLayout
android:id="@+id/my_root_layout"
然后,在你onCreate()
,得到这个ViewGroup中的引用:
IMEInterceptLayout layout = (IMEInterceptLayout)findViewById(R.id.my_root_layout);
layout.setOnBackPressedPreIMEListener(new OnBackPressedPreIMEListener() {
@Override
public void onBackPressedPreIME() {
InputMethodManager imm = (InputMethodManager)MyActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
View focusedView = MyActivity.this.getCurrentFocus();
if(focusedView != null)
imm.hideSoftInputFromWindow(focusedView.getWindowToken(), 0);
}
}
显然将您的实际活动的名称替换MyActivity
。这将允许你自己解除键盘而不是依靠系统为你做。对于结果来说这是一项相对较大的工作量,但它是可靠的。
相关问题
- 1. 当在Xamarin Forms中的android中打开键盘时按下后退按钮时会触发哪个事件?
- 2. 当按下后退按钮时完成活动(警报对话框)
- 3. 通知打开活动,后退按钮被按下,主要活动被打开?
- 4. 当软键盘显示时按下后退按钮时清除焦点EditText
- 5. 在注销时,清除活动历史堆栈,防止“后退”按钮从最后打开活动
- 6. 当按下后退按钮时停止片段中的AsyncTask
- 7. 通知打开活动,按回按钮,防止打开回栈活动?
- 8. 在textView中,当我点击完成按钮时,键盘不会退出
- 9. 如何在飞溅活动中按下后退按钮时完成其他活动?
- 10. 如何在按下后退按钮时防止iFrame自动运行?
- 11. 当键盘打开时底部按钮向上移动
- 12. 每当我按下后退按钮时,应用程序停止
- 13. 如何在搜索键按下时打开活动android
- 14. 当按下后退按钮时Android崩溃
- 15. 问题在活动完成()和在按下back按钮在android
- 16. 如何防止后退按钮按下单个任务活动的娱乐?
- 17. 应用按后退按钮当按下后退按钮
- 18. 键盘上'完成'按钮的退出键盘
- 19. 当HOME键被按下时,终止所有活动android
- 20. 当退格键盘按钮单击时,onKey不会触发android
- 21. android防止popstack按回退按钮
- 22. 当后退按钮按下时重新启动片段类
- 23. 按下后退键时的动画
- 24. 按下后退按钮和当前活动状态
- 25. 防止在按下后退/前进按钮时查看受限制的页面
- 26. 使用后退按钮开始活动
- 27. 按下后退按钮时传递BOOL
- 28. Android活动无响应,直到按下后退按钮
- 29. 当在Flex中按下“ESC”时,防止退出全屏
- 30. Android的完整动作使用'后退按钮按下处理
它的设计依赖..可能需要添加额外的代码来控制有关隐藏键盘的HTC设置。 – Kiran 2013-03-21 04:31:10