Android屏幕键盘自动弹出

时间:2010-03-23 01:12:23

标签: android android-softkeyboard

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

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

12 个答案:

答案 0 :(得分:268)

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

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

答案 1 :(得分:84)

<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文件中,以便您希望软件键盘保持隐藏的EACH活动。这意味着键盘不会自动启动,用户必须“点击” '在文本字段上提出它。我搜索了将近一个小时的工作,所以我想我会分享。

答案 2 :(得分:5)

此代码适用于所有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);
 }

答案 3 :(得分:5)

AndroidManifest.xml

中添加此内容
android:windowSoftInputMode="stateHidden|adjustResize"

完美无缺。 :)

答案 4 :(得分:3)

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

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

或将此代码粘贴到AndroidManifest.xml

中的Activity标记中
android:windowSoftInputMode="stateVisible"

答案 5 :(得分:3)

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

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

确保活动开始时焦点不在editText上。

答案 6 :(得分:2)

您可以在活动代码

下的 Android Manifest.xml 中添加单行代码
 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

这可能会对你有所帮助。

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:1)

你可以像

那样以编程方式完成
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

或在android:windowSoftInputMode="stateHidden"

中的<activity tag内设置AndroidManifest.xml

答案 9 :(得分:0)

<p:dataTable value="#{cc.attrs.bean.model}" 
...
  <p:column style="width:#{bean.getWidth('colDate', 55)}px;"

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

答案 10 :(得分:0)

在导入最上方的位置包括以下内容:

import android.view.WindowManager;

在OnCreate部件上添加此代码:

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

答案 11 :(得分:0)

如果你使用的是fragment,如果你想隐藏键盘,你需要每次在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);
            }
        }
    }
}