我的一个应用程序有一个“打开屏幕”(基本上是一个菜单) ,其中有一个 EditText后跟几个 Button。问题是,我的几个用户报告说,当他们打开应用程序时,它会自动弹出屏幕上的键盘,甚至不需要他们触摸 EditText。据我所知,所有这些用户都在使用 HTC Hero。
EditText
Button
这是1.5版的窃听器吗,我能做点什么吗?
在那个版本的 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"
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 ()方法中使用这两种方法
或者将此代码粘贴到 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); } } } }