Android 屏幕上的键盘自动弹出

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

这是1.5版的窃听器吗,我能做点什么吗?

118676 次浏览

在那个版本的 Android 中,当视图膨胀时,焦点会默认设置为第一个可对焦的控件——如果没有物理键盘,屏幕上的键盘就会弹出。

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

你有没有试过在仿真器中运行 Android 1.5来测试这个问题?

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

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
<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)

对于您希望软件键盘保持隐藏的每个活动,在应用程序的清单 XML 文件中放置“ windowSoftInputMode = “ stateHidden”。这意味着键盘不会自动弹出,用户必须“点击”一个文本字段才能弹出。我花了将近一个小时寻找一些有用的东西,所以我想我应该分享一下。

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

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

这可能对你有帮助。

您可以像下面这样通过编程方式完成

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

或者在 AndroidManifest.xml内设置 <activity tag中的 android:windowSoftInputMode="stateHidden"

这段代码适用于所有的安卓版本:

@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);
}

在你的 AndroidManifest.xml中加入以下内容:

android:windowSoftInputMode="stateHidden|adjustResize"

效果非常好。 :)

您可以在活动的 onCreate ()方法中使用这两种方法

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

或者将此代码粘贴到 AndroidManifest.xml 中的 Activity 标记中

android:windowSoftInputMode="stateVisible"
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* 这是对于 Android.xamarin 和 FindFocus ()-它在层次结构中搜索当前有焦点的视图,如 i have _ enterPin。RequestFocus ()在上面的代码之前,因此它显示的是 _ enterPin EditText 的键盘 *

包括进口在上面的部分:

import android.view.WindowManager;

在 OnCreate 部分添加以下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

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

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

它确保在活动启动时焦点不在 edit Text 上。

如果您正在使用片段,那么如果您想隐藏键盘,则需要在 onResume 和 onCreate 中每次调用 hideKeyboard。

    @Override
public void onResume() {
super.onResume();
Log.d(TAG, "SectionMyFragment onResume");
hideKeyboard();
}


private void hideKeyboard() {
if (getActivity() != null) {
InputMethodManager inputMethodManager = (InputMethodManager)
getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);


if (inputMethodManager != null) {
if (getActivity().getCurrentFocus() != null) {
Log.d(TAG, "hideSoftInputFromWindow 1");
inputMethodManager.hideSoftInputFromWindow((getActivity().getCurrentFocus()).getWindowToken(), 0);
}
}
}
}