Android软键盘不会在2.2 / 2.3中显示,但会在3.0+中显示
我的应用程序适用于Android 2.2及更高版本。 其中,我使用ActionbarSherlock来允许3.0版以前的设备使用操作栏。 我在操作栏中使用了EditText以允许用户输入文字进行搜索。
使用模拟器,使用Android 4.0和4.1(我还没有尝试使用3.x,因为它不是平板电脑应用程序),当选择EditText时,软键盘会根据需要弹出。 但不是如此使用Android 2.2或2.3.3,它只是不显示。
EditText的代码很简单:
item.setActionView(R.layout.collapsible_edittext);
etInput = (EditText) item.getActionView().findViewById(R.id.etInput);
etInput.requestFocus();
布局:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/etInput"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:lines="1"
android:maxLines="1"
android:inputType="textFilter|textNoSuggestions"
android:imeOptions="actionSend"/>
现在我已经尝试在etInput.requestFocus();
之后立即使用此片段专门显示软键盘etInput.requestFocus();
,但没有什么区别:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(etInput, InputMethodManager.SHOW_IMPLICIT);
我试图找出这是ActionbarSherlock还是一个更一般的Android问题。 我搜索了很多关于在活动中强制显示软键盘的文章,但尚未找到解决方案。
谢谢
我有同样的问题...一切正常,直到我在HTC Nexus One上测试。 我最终将以下代码添加到附加到AciontBarSherlock menuItem的onActionExpandListener。
item.setOnActionExpandListener(new OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// post delayed to allow time for edittext to become visible
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mSearchText.clearFocus();
showKeyboard();
mSearchText.requestFocus();
}
}, 400);
return true;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
hideKeyboard();
return true;
}
});
private void showKeyboard() {
if (android.os.Build.VERSION.SDK_INT < 11) {
mInputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
} else {
mInputManager.showSoftInput(mSearchText, InputMethodManager.SHOW_IMPLICIT);
}
}
private void hideKeyboard() {
if (android.os.Build.VERSION.SDK_INT < 11) {
mInputManager.hideSoftInputFromWindow(getActivity().getWindow().getCurrentFocus().getWindowToken(),0);
} else {
mInputManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
对于那些在Mono机器人上使用C sharp的人,这是代码:
new Thread(new ThreadStart(() =>
{
while (DateTime.Now < _dt)
Thread.Sleep(10);
RunOnUiThread(showKeyboard);
}
)).Start();
protected void showKeyboard()
{
int osSDK = (int)Android.OS.Build.VERSION.SdkInt;
if (osSDK < 11)
{
this.mm().ToggleSoftInput(ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);
}
else
{
EditText editTextView = FindViewById<EditText>(Resource.Id.EditTextSubCellAddVenue);
this.mm().ShowSoftInput(editTextView, ShowFlags.Implicit);
}
}
protected void hideKeyboard()
{
int osSDK = (int)Android.OS.Build.VERSION.SdkInt;
if (osSDK < 11)
{
this.mm().HideSoftInputFromWindow(this.Window.CurrentFocus.WindowToken, 0);
}
else
{
this.mm().HideSoftInputFromWindow(this.CurrentFocus.WindowToken, HideSoftInputFlags.NotAlways);
}
}
protected InputMethodManager mm()
{
if (imm == null)
{
EditText editTextView = FindViewById<EditText>(Resource.Id.EditTextSubCellAddVenue);
imm = (InputMethodManager)this.GetSystemService(Android.Content.Context.InputMethodService);
}
return imm;
}
链接地址: http://www.djcxy.com/p/62351.html
上一篇: Android soft keyboard will not show in 2.2/2.3, but does in 3.0+