我的一个应用程序有一个“打开屏幕”(基本上是一个菜单),EditText
后面跟着几个Button
s。问题是我的一些用户报告说,当他们打开应用程序时,它会自动弹出屏幕键盘,而他们甚至没有触摸EditText
. 据我所知,所有这些用户都在使用HTC Hero。
这是1.5中的错误吗?我能做些什么吗?
我的一个应用程序有一个“打开屏幕”(基本上是一个菜单),EditText
后面跟着几个Button
s。问题是我的一些用户报告说,当他们打开应用程序时,它会自动弹出屏幕键盘,而他们甚至没有触摸EditText
. 据我所知,所有这些用户都在使用HTC Hero。
这是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)
将 'windowSoftInputMode="stateHidden"' 放置在应用程序的清单 XML 文件中,用于您希望软件键盘保持隐藏的每个活动。这意味着键盘不会自动出现,用户必须“单击”文本字段以将其显示出来。我搜索了将近一个小时的东西,所以我想我会分享。
此代码适用于所有 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);
}
将此添加到您的AndroidManifest.xml中:
android:windowSoftInputMode="stateHidden|adjustResize"
它完美地工作。:)
将此添加到 XML 的父布局中。
android:focusable="true"
android:focusableInTouchMode="true"
它确保 Activity 启动时焦点不在 editText 上。
您可以在活动的 onCreate() 方法中使用它
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
或将此代码粘贴到 AndroidManifest.xml 的 Activity 标记中
android:windowSoftInputMode="stateVisible"
在那个版本的 Android 中,当视图膨胀时,焦点将默认设置为第一个可聚焦的控件 - 如果没有物理键盘,则会弹出屏幕键盘。
要解决此问题,请在其他地方明确设置焦点。如果焦点设置为 EditText 以外的任何内容,则不会出现屏幕键盘。
您是否尝试过在模拟器中运行 Android 1.5 进行测试?
您可以在活动标签下的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);
或设置android:windowSoftInputMode="stateHidden"
在<activity tag
里面AndroidManifest.xml
在导入最重要的地方包括这个:
import android.view.WindowManager;
在 OnCreate 部分添加此代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
imm.ShowSoftInput(_enterPin.FindFocus(), 0);
*这适用于 Android.xamarin 和 FindFocus()-它在层次结构中搜索植根于当前具有焦点的视图的视图,因为我在上述代码之前有 _enterPin.RequestFocus(),因此它显示了 _enterPin EditText 的键盘 *
如果你使用fragments,你需要每次在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);
}
}
}
}