Android开发之自定义输入框无法弹起键盘输入法的解决方法

通常在开发需求中,在很多场景下我们需要手动吊起输入法功能,但是偶尔会发现在自定义EditText输入框中有时候会无法弹起输入法,举个我遇到的场景:

第一次进入此页面要求立马获取输入框焦点并且弹起输入法,可是我这个是自定义的输入框调用多次最终依然无法弹起。

具体原因如下:

当进入activity或者fragment页面的时候的onCreate和onCreateView生命周期的时候,此时输入框还没有倍绘制完成,因此输入法在绘制完成之前无法获取到要输入的输入框焦点因此无法弹出。

解决办法如下:

方法一,在edittext.post中弹起键盘,已成功

//我是在fragment的onCreateView生命周期直接吊起键盘导致吊起失败的,解决方法如下 ,
//通过在edittext.post中弹起键盘
binding.searchEditText.hint = hotWordData
            //首先获取焦点
            binding.searchEditText.requestFocus()
            //再调起系统键盘
            binding.searchEditText.post { SoftKeyboardUtils.showKeyboard(binding.searchEditText) }

方法二,请自行测试

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        InputMethodManager manager =(InputMethodManager) etSearch.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        manager.showSoftInput(etSearch, 0);
    }
}, 500);

看下吊起和隐藏输入法法的工具类

import android.content.Context
import android.view.View
import android.view.inputmethod.InputMethodManager
import com.noboauto.common.global.GlobalContext

/**
 * 显示和关闭系统键盘的方法
 * @author xiayiye5
 * @date 2021/9/29 10:45
 */
object SoftKeyboardUtils {
    private val imm: InputMethodManager =
        GlobalContext.get().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

    /**
     * 关闭系统键盘的方法
     */
    fun hideKeyboard(view: View) {
        imm.hideSoftInputFromWindow(view.windowToken, 0)
    }

    /**
     * 显示系统键盘的方法
     */
    fun showKeyboard(view: View) {
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }
}

看下解决后的效果图

感谢两位博主提供的方法:方法一博主 方法二博主

猜你喜欢

转载自blog.csdn.net/xiayiye5/article/details/120742639