代码之家  ›  专栏  ›  技术社区  ›  Vector

Android 8上的kotlin隐藏软键盘

  •  2
  • Vector  · 技术社区  · 6 年前

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidstackoverflow.devconstraint"
    android:windowSoftInputMode="stateAlwaysHidden">
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
    
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:windowSoftInputMode="stateAlwaysHidden">
    
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".LayOutActivity"
            android:windowSoftInputMode="stateAlwaysHidden">
        </activity>
    </application>
    

    我们已经尝试了这个问题中的每一行代码 Question

    LayOutActivity中的代码

    open class LayOutActivity : AppCompatActivity() {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_lay_out)
        this.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
        val view = currentFocus
        //if (view != null) {
            //val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            //imm.hideSoftInputFromWindow(view.windowToken, 0)
        //}
        //val imm: InputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        //if (imm.isActive)
        //imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
    
        //hideSoftKeyboard(view = null)
    
    
        //UIHelper.hideSoftKeyboard(activity = Activity())
            doALL()
    
    
    }
    
    //fun hideSoftKeyboard(view: View?) {
        //val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        //inputMethodManager.hideSoftInputFromWindow(view?.windowToken, 0)
    //}
    fun doALL(){
        //UIHelper.hideSoftKeyboard(activity = Activity())
        UIHelper.hideSoftKeyboard(view = null)
        UIHelper.hideKeyboard(this,etOne)
        etOne.setText("I have new Text")
    }
    
    
    object UIHelper {
    
        fun hideSoftKeyboard(activity: Activity?) {
            if (activity != null) {
                val inputManager = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                if (activity.currentFocus != null && inputManager != null) {
                    inputManager.hideSoftInputFromWindow(activity.currentFocus!!.windowToken, 0)
                    inputManager.hideSoftInputFromInputMethod(activity.currentFocus!!.windowToken, 0)
                }
            }
        }
    
        fun hideSoftKeyboard(view: View?) {
            if (view != null) {
                val inputManager = view!!.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                inputManager?.hideSoftInputFromWindow(view!!.getWindowToken(), 0)
            }
        }
    
        fun hideKeyboard(activityContext: Context, editText: EditText) {
            editText.requestFocus()
            Handler().postDelayed({
                val inputMethodManager = activityContext.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                inputMethodManager.showSoftInput(editText, InputMethodManager.HIDE_IMPLICIT_ONLY)
            }, 250)
        }
    }
    

    }

    我们只想知道如何隐藏软键盘 我们以前在LayOutActivity中使用过一行代码,而且它很有效 这是安卓8的新问题还是Kotlin的新问题? 这是我们的一条成功的路线

    this.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   ʍѳђઽ૯ท    6 年前

    这应该起作用:

    val inputManager: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    inputManager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.SHOW_FORCED) // It can be done by show_forced too
    

    AndroidManifest.xml :

    android:windowSoftInputMode="stateHidden"
    

    还有,如果你有 EditText

    editText.setShowSoftInputOnFocus(false);
    

    看看这个: https://stackoverflow.com/a/49534949/4409113

    Android - Hide keyboard on Android 8