Android屏幕键盘自动弹出


140

我的一个应用程序具有一个“正在打开的屏幕”(基本上是一个菜单),EditText其后跟着几个Buttons。问题是我的一些用户报告说,当他们打开应用程序时,它会自动弹出屏幕键盘,而他们甚至没有触摸EditText。据我所知,所有这些用户都在使用HTC Hero

这是1.5版的错误吗?有什么我可以做的吗?


1
如果是错误,则可能专门在Sprint Hero中。Sprint在他们出售的Heros上有一个错误版本的Android,而且他们似乎并不急于为此发布错误修正。Sprint Heros与所有其他Android设备之间的行为差​​异很大。据我所知,英雄的其他版本(例如欧洲的版本)没有这些问题。
马克B

不幸的是,欧洲的Hero's确实存在重大问题,它们会根据内部版本号进行更改,但我们遇到了3-4个主要错误。
Donal Rafferty 2010年

Answers:


279

您可以在活动的onCreate方法中使用以下代码行,以确保仅当用户单击EditText时才弹出键盘。

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

这对我不起作用(2.2 MyTouch 3G)。在我的onCreate()方法中,我调用setSoftInputMode()。EditText仍使键盘显示:(
Nate

这对我有用。我正在运行Android 2.3.4,并使用<uses-sdk android:minSdkVersion =“ 3” />开发
Sandy

78
或使用android:windowSoftInputMode="stateHidden"这里
Swato

所以令我困惑的是,我的登录活动似乎已经很好地隐藏了键盘。我现在也进行了注册活动,但是默认情况下会弹出键盘。那么,如何避免这种登录呢?我在登录活动中找不到setSoftInputMode,或者在activity.xml中找不到windowSoftInputMode属性。
查基(Chucky)2014年

并非总能正常工作:在某些设备上,SOFT_INPUT_STATE_ALWAYS_HIDDEN导致以下错误:不是活动中最后一个的编辑文本无法导致软键盘出现。在清单中使用“ android:windowSoftInputMode =“ stateHidden”“也具有相同的效果。开发人员文档指出,除非强制使用软键盘,否则不会自动显示软键盘,但这完全是错误的。

85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

适用于Android 3.0、3.1、3.2、4.0-用于编译的编辑器(Eclipse 3.7)

将“ windowSoftInputMode =“ stateHidden””放置在应用程序的清单XML文件中,以实现您希望软键盘保持隐藏状态的每个活动。文本字段来显示它。我搜索了将近一个小时的有效内容,因此我想分享一下。


到目前为止,我找到的最佳解决方案。在不打开键盘的情况下聚焦该字段。在Nexus S上使用4.1.2
alexismorin

1
如果您正在使用片段并且不想让键盘更改布局

6

将此添加到您的AndroidManifest.xml中

android:windowSoftInputMode="stateHidden|adjustResize"

它运作完美。:)


1
谢谢你的回答。对不起,现在我该如何打电话给键盘?通话时不会出现requestFocus()
德川武西YD

6

此代码将在所有android版本上运行:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }

加号1可以告诉您弹出的窗口和不弹出的窗口
Demon App Programmer,

4

将其添加到XML的父布局中。

android:focusable="true" 
android:focusableInTouchMode="true"

它确保活动启动时焦点不会集中在editText上。


3

您可以在活动的onCreate()方法中使用此方法

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

或将此代码粘贴到AndroidManifest.xml的“活动”标签中

android:windowSoftInputMode="stateVisible"

2
我认为您的意思是“ stateHidden”而不是“ stateVisible”。
stevehs17 '17

2

您可以在活动标记下的Android Mainfest.xml中添加单行代码

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

这可能对您有帮助。


1

在该版本的Android中,当视图放大时,默认情况下会将焦点设置为第一个可聚焦控件-如果没有物理键盘,则会弹出屏幕键盘。

要解决此问题,请在其他地方显式设置焦点。如果将焦点设置为EditText以外的任何其他值,则不会出现屏幕键盘。

您是否尝试通过在模拟器中运行Android 1.5进行测试?


我已经在模拟器中进行了尝试(然后再次尝试以确保我没有发疯)。它的作用是“正确的”(表示没有弹出键盘)。另外,当我最初写这篇文章的时候,我的G1正在运行1.5,但它不是这样工作的(当他们的键盘被“隐藏”时)。
杰里米·洛根

我仍然打赌这与最初的关注点有关。也许这是HTC Hero特有的功能,但我会尝试将焦点明确设置为其他功能,看看是否可以为您的用户解决问题。
马克B

有什么办法可以给“什么都没有”的焦点?
杰里米·洛根

1
这对我不起作用(2.2 MyTouch 3G)。在我的onCreate()方法中,我在Button上显式调用requestFocus(),Button是视图中的第二个窗口小部件。EditText仍使键盘显示:(
Nate

1

您可以通过编程方式完成

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

android:windowSoftInputMode="stateHidden"放在<activity tag里面AndroidManifest.xml


0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

*这是针对Android.xamarin和FindFocus()的-它以当前焦点所在的此视图为基础在层次结构中搜索视图,因为在上面的代码之前我有_enterPin.RequestFocus(),因此它显示了_enterPin EditText的键盘*


0

在最重要的位置包括以下内容:

import android.view.WindowManager;

在OnCreate部件上添加以下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.