【问题标题】:How to remove auto focus/keyboard popup of a field when the screen shows up?屏幕显示时如何删除字段的自动对焦/键盘弹出?
【发布时间】:2010-05-23 16:58:58
【问题描述】:

我有一个屏幕,第一个字段是EditText,它在启动时获得焦点,还弹出数字输入类型,这很烦人

如何确保在启动 Activity 时没有获得焦点,和/或没有抬起输入面板?

【问题讨论】:

    标签: android keyboard popup android-softkeyboard


    【解决方案1】:
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);
    

    在应用标签中如下设置清单文件中的活动属性

    android:windowSoftInputMode="stateHidden"
    

    【讨论】:

    • 在 AndroidManifest.xml 文件中设置 android:windowSoftInputMode 可以与其他值进行或运算。模式通常意味着单个值,但在这种情况下,该值是标志的集合。值说明:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
    【解决方案2】:

    转到您的应用程序清单文件,并为您要禁用自动键盘弹出的活动编写此行。

    android:windowSoftInputMode="stateHidden"
    

    【讨论】:

    • 对我不起作用。我把它放在activity_main.xml 中。当我把它放在 onCreate() 中时,这很完美。 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
    【解决方案3】:

    以编程方式不显示键盘,但默认小部件仍接收焦点调用:

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

    onResume()

    【讨论】:

      【解决方案4】:
      getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
      

      onCreate()中调用上述方法。它会阻止softKeyboard显示,除非用户通过tapping or clicking.选择EditText

      或者干脆在Manifest.xml的Activity标签中添加android:windowSoftInputMode="stateHidden"

      【讨论】:

        【解决方案5】:

        这通常是一团糟。我尝试的第一件事是尝试通过 .您还必须具有可聚焦和可聚焦的InTouchMode。

        <TextView
          ...
          android:focusable="true"
          android:focusableInTouchMode="true">
        
            <requestFocus/>
        </TextView>
        

        【讨论】:

        • 这行得通。我觉得这是一种更清洁的方法,但这也取决于您的条件。我接受这个。
        【解决方案6】:

        让另一个视图获取焦点。默认情况下,当布局膨胀时,第一个可聚焦的 View 将获得焦点。您可以通过 XML 请求关注不同的视图:

        <TextView
            android:layout_width="wrap_parent"
            android:layout_height="wrap_content"
            android:text="Some other view">
        
            <requestFocus />
        </TextView>
        

        这适用于任何视图。

        如果您想以编程方式进行,可以使用view.requestFocus()

        【讨论】:

          【解决方案7】:

          android:windowSoftInputMode="stateHidden" 添加到清单中的 Activity 只会在您启动 Activity 时隐藏键盘,或者如 Google 所说的那样

          当用户肯定地向前导航到活动时,而不是 而不是因为离开另一个活动而回到它

          若要在用户按下后退按钮并从其他活动返回您的活动时也隐藏键盘,请使用android:windowSoftInputMode="stateAlwaysHidden"

          【讨论】:

            【解决方案8】:
            if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
            {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
            }
            

            【讨论】:

            • 欢迎来到 StackOverflow!这与其他论坛不同,如果您想更改答案,只需单击edit 链接并进行更改。请尝试通过选择您的代码并使用代码示例按钮{} 或按Ctrl+K 来格式化您的代码。
            【解决方案9】:

            没有尝试过,我也没有靠近我的编程计算机,但我怀疑以编程方式将焦点发送到父视图或类似性质的东西可以解决问题 - 这更有可能是一种解决方法而不是解决方案,但再次无法测试一下只是一个想法

            【讨论】:

            • 我试过了,但没有用。我在一个按钮上调用了.requestFocus();,但仍然弹出键盘。
            • 想法可以添加为cmets
            猜你喜欢
            • 1970-01-01
            • 2011-01-30
            • 2015-06-18
            • 1970-01-01
            • 2020-12-27
            • 1970-01-01
            • 2011-02-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多