Android在TabHost中以编程方式关闭/隐藏键盘?
我目前正在开发一个Android应用程序,当您第一次加载这个应用程序时,它使用TabHost来显示应用程序的各种视图(活动)。因此,当它加载时,它有一个视图,用户可以在其中输入一个数字,从而自动显示软键盘 起初,我假设当用户转到应用程序中的其他选项卡时,如果没有EditText字段,键盘会消失,但是键盘会保留下来,并从数字键盘切换到标准文本键盘,而关闭键盘的唯一方法是单击设备上的后退按钮。这不是用户友好的,也不是我想要的,因为当用户切换到另一个选项卡时,键盘应该关闭 我已经创建了下面的代码,如果键盘当前在屏幕上打开,它应该会关闭Android在TabHost中以编程方式关闭/隐藏键盘?,android,android-tabhost,android-softkeyboard,Android,Android Tabhost,Android Softkeyboard,我目前正在开发一个Android应用程序,当您第一次加载这个应用程序时,它使用TabHost来显示应用程序的各种视图(活动)。因此,当它加载时,它有一个视图,用户可以在其中输入一个数字,从而自动显示软键盘 起初,我假设当用户转到应用程序中的其他选项卡时,如果没有EditText字段,键盘会消失,但是键盘会保留下来,并从数字键盘切换到标准文本键盘,而关闭键盘的唯一方法是单击设备上的后退按钮。这不是用户友好的,也不是我想要的,因为当用户切换到另一个选项卡时,键盘应该关闭 我已经创建了下面的代码,如果
private OnTabChangeListener MyOnTabChangeListener = new OnTabChangeListener(){
@Override
public void onTabChanged(String tabId) {
Log.d("TAG", "I am Inside the Tab Changed Function!!");
if(getTabHost().getCurrentTabTag().equals("SecondTab")) {
Log.d("TAG", "I am Inside the SecondTab Section!!");
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null)
{
Log.d("TAG", "I am Inside the SecondTab imm null!!");
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}
if(getTabHost().getCurrentTabTag().equals("FirstTab")) {
Log.d("TAG", "I am Inside the FirstTab Section!!");
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null)
{
Log.d("TAG", "I am Inside the FirstTab imm null!!");
imm.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
}
}
}
};
上面的代码的工作原理就像我进入第二个选项卡,键盘在第一个选项卡上打开,它将关闭,但是如果我接着进入第三个选项卡,然后返回第二个选项卡,它将重新打开键盘,这是我不想要的,因为我只需要第一个选项卡上的键盘
有人能帮我吗?因为我不敢相信仅仅控制软键盘就这么难
提前谢谢
编辑
我甚至尝试在SecondTab click listener中使用以下代码,但没有成功:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null)
{
Log.d("TAG", "I am Inside the SecondTab imm null!!");
imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
编辑2
我很感激下面的第一个回复,但是我尝试过将其添加到活动本身,但由于某些原因它不起作用:S我也尝试过许多不同的事情,但没有成功,我甚至将下面的内容添加到我的清单文件中,但这不起作用,这令人费解:S
android:windowSoftInputMode="stateHidden"
这本应该有效,但没有,这真的很烦人。我的清单文件的一部分如下:
<application
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".TabActivityTop"
android:label="@string/app_name" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="Tab1" android:screenOrientation="portrait"></activity>
<activity android:name="Tab2" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"></activity>
<activity android:name="Tab3" android:screenOrientation="portrait"></activity>
<activity android:name="Tab4" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden"></activity>
</application>
我真的希望有人能帮我:)试试这样:
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
或尝试使用:
rootLayout.requestFocus();
这会去哪里?在活动中或选项卡更改侦听器中?在您想要的地方,我想在ontabchange()中有人有任何想法或可以告诉我哪里出了问题吗?嗨,Mertuarez,我已经阅读了附加的链接,但我无法在活动中播放该代码,因为它没有EditText元素。问题仍然是按下选项卡时键盘无法关闭。由于某种原因,它一直存在,有什么想法吗?从布局中删除我没有任何观点
rootLayout.requestFocus();