我试图在一个Activity中强制打开Soft Keyboard并抓取输入的所有内容,因为我想自己处理输入,我没有EditText.目前我已经尝试了这个,但它不起作用.我想在mAnswerTextView下打开Soft Keyboardto(注意:它是TextView而不是EditText).
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// only will trigger it if no physical keyboard is open
mgr.showSoftInput(mAnswerTextView, InputMethodManager.SHOW_IMPLICIT);
Run Code Online (Sandbox Code Playgroud)
当我从ActionBar激活搜索时,我看到这个问题集中在SearchView EditText上.但是,当它获得焦点时键盘不会出现.不应该,因为它只是一个普通的EditText?(这是一个普通的EditText吗?)这种行为在Android SDK 11级上可见.(三星Galax Tab 7.7与Android股票.)
我现在有一个解决方法,它挂钩onOptionsItemSelected(MenuItem item)我的Activity 的方法,显示键盘.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean menuSelectionHandeled = super.onOptionsItemSelected(item);
// menu_search is the id of the menu item in the ActionBar
if (item.getItemId() == R.id.menu_search) {
mInputManager.showSoftInput(null, InputMethodManager.SHOW_IMPLICIT);
}
return menuSelectionHandeled;
}
Run Code Online (Sandbox Code Playgroud)
在哪里mInputManager的实例InputMethodManager.
ActionBar是用ActionBarSherlock构建的,因为目标设备是Android 3.x,这可能是症状的原因吗?根据ActionBarSherlock的常见问题解答:
Android 3.x(也称为Honeycomb)上的操作栏未实现Android 4.x(Ice Cream Sandwich)中的所有功能.为了在所有平台上提供完整的操作栏API以及统一所有Android版本的样式,使用自定义实现.
我有一个ActionView带菜单项ActionBar(使用ActionBarSherlock),我可以在其中显示EditText一个搜索字段.这是一个Activity用CustomViewActionBar 启动另一个的输入,它显示相同的布局(我没有使用任何东西来强制它SoftKeyboard出现在第二个活动中,这里没有问题).当我想让第一个活动中的视图崩溃时软键盘自动显示/消失,我使用:
openKeyboard方法
mImm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
Run Code Online (Sandbox Code Playgroud)
closeKeyboard方法
mImm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
我使用它ActionExpandListener来使SoftKeyboard在View展开或折叠时出现或消失.通过以上两种方法,我得到了预期的结果.我在几个关于SO的问题上发现了这一点(特别是关闭/隐藏Android软键盘并在ActionBar上显示SearchView的软键盘或强制打开软键盘).
只是为了理解,当我使用SHOW_IMPLICIT或SHOW_FORCED单独使用时,它对较低版本没有影响(如2. +).EditText是专注的,但键盘没有出现(所以,你猜它是一件坏事).在最近的版本中(例如4. +),这是一个很好的效果,没有问题.然后,我强制键盘显示上面的openKeyboard方法.
现在,我遇到了一些麻烦...
在较低的版本中,我在键盘创建/销毁之前和之后得到了"空"空间,我可以忍受这个.但是在最近的版本中,当我返回第一个Activity时,我得到了"空"空间.而且它在不到一秒的时间就在这里,但足以看到它!
为了更好地了解会发生什么,请参见下图:
1.第二项活动:我按下向上主页按钮 - 键盘正常消失.
2.(返回)第一个活动:我的ListView被一个"空"空间覆盖(我的应用程序中的背景颜色).它消失了(这与SoftKeyboard的高度相同,毫无疑问!)
我想这是因为我强迫键盘出现在我的第一个活动中,虽然我在第二次活动时也强迫键盘隐藏,但是当我返回第一个活动时如何解决"空"空间?
摘要
1)活动=>按菜单中的项目>查看折叠>显示键盘>点击文本>发送>隐藏键盘>启动B活动.
2)B activity => setCustomView in actionbar>仅在编辑文本被聚焦/点击时显示键盘>点击文本>发送>隐藏键盘>刷新内容>按主页按钮>返回活动
3)活动=>"空"屏幕>屏幕消失.
任何帮助将非常感激.
谢谢你的时间.
编辑
我添加了我的第一堂课的代码,看看是否有人告诉我我做错了什么.也许这是我的代码问题.
菜单(ActionView)
ActionBar actionBar;
MenuItem …Run Code Online (Sandbox Code Playgroud) 我已经阅读了这篇文章,它会在显示一个对话框时自动显示虚拟键盘.但是,它不适合我.任何想法为什么?虽然当对话框出现时编辑文本自动聚焦,但事件不会触发.我也读过onpostresume的答案,但我不知道如何应用它.任何帮助表示赞赏.
final Dialog dialog = new Dialog(ThesisI.this);
dialog.setContentView(R.layout.budget_dialog);
final EditText et = (EditText) dialog.findViewById(R.id.textComments);
final Button enter = (Button) dialog.findViewById(R.id.buttonEnter);
final Button cancel = (Button) dialog.findViewById(R.id.buttonCancel);
enter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
/**cancel */
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
dialog.show();
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,我注意到如果我将焦点更改为按钮,则再次聚焦到编辑文本.此事件有效,使用下面的代码.
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean …Run Code Online (Sandbox Code Playgroud)