Android手动显示软键盘以及软键盘设置发送按钮的注意事项

本文总结了在Android项目中手动显示软键盘及其注意事项,包括软键盘显示的条件,如需输入框为EditText、获取焦点、可见等。同时讨论了如何处理软键盘上的发送按钮,指出Android与iOS微信的差异,提供了实现与微信输入体验一致的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近更改项目中的输入框样式,涉及到软键盘的显示和隐藏问题,总结了几点注意事项,希望能帮到遇到同样问题的小伙伴。博文中除了显示软键盘的注意问题以外,还有一个发送按钮是否需要显示在软键盘上的问题

一、先说一下显示软键盘

我们的布局显示样式

除了点击EditText,展示软键盘以外,点击两个按钮,也需展示软键盘

Adroid中显示软键盘常用的方法是

public boolean showSoftInput(View view, int flags);

这个方法需要我们传入两个参数,第一个表示当前要接收软键盘输入的View,第二个参数是软键盘显示时的控制参数。

根据项目中遇到的问题,总结了几点使用此方法有以下注意事项:

1、第一个参数中的View必须是EditText,或者EditText的子类,如果是其他类型的View,如Button,TextView等,showSoftInput()方法不起作用。

2、第一个参数中的View必须是可以获得焦点的(即view.isFocusable()返回true),如果不能获取焦点,则showSoftInput()方法不起作用。EditText默认是可以获取焦点的,所以此条件一般都可以满足,如果不满足,可以通过view.setFocusable(true);将其设置为可以获取焦点的View。

3、第一个参数中的View当前必须已经获取焦点(即view.isFocused()返回true),如果当前焦点不在该View上,那么showSoftInput()方法不起作用。虽然EditText是默认可以获取焦点的,但由于一个布局中可能会有多个控件可以获取焦点,焦点位置不一定恰好在EditeText上,所以此条件不一定满足。为了让showSoftInput()可以起作用,必须在showInputSoft之前,先通过view.requestFocus获取焦点,然后在执行showSoftInput();

4、第一个参数中view必须是可见的,即view.getVisibility()等于VISIBLE,如果view是不可兼得,无论是INVISIBLE还是GONE,showSoftInput()方法都是不起作用的;项目中的输入框和按住说话控件是相互切换的,刚开始的设置方法,显示控制说话控件时,输入框的属性为GONE,导致不能成功掉起软键盘。。

5、当前布局必须已经加载完成,如果还未绘制完成,showSoftInput方法也是不起作用的。特别的,在Activity的onCreate()方法中执行showSoftInput方法是不起作用的。如果需要界面打开,即显示软键盘,可以通过postDelayed的方式,延时执行showSoftInput方法,延时时间一般在50ms以上,防止界面布局内容较多,加载时间偏长。代码示例如下:

getWindow().getDecorView().postDelayed(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            view.requestFocus();
            imm.showSoftInput(view, 0);
        }
    }
}, 100);

项目中使用的显示和隐藏输入框的方法为:

    /**
     * 软键盘显示隐藏
     */
    public void showSoftInput() {
        input.requestFocus();
        imm.showSoftInput(input, 0);
    }

    /**
     * 隐藏输入框
     */
    public void hideSoftInput() {
        imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
    }

二、此外,除了上述多种布局以外,还有一个简单的只有输入框和发送按钮的布局

两个普通的不能再普通的布局,可能许多小伙伴优先想到的是EditText添加监听器,监听文字变化,更改发送按钮的颜色。但是我们对这块包括上述布局输入问题的需求是与微信一致。于是拿出手机,体会一下微信的输入规则,开始写代码。这块我想说的是,苹果手机的微信和安卓版本的微信,发送按钮的处理方式并不一样!!!!

苹果手机的微信中,发送按钮都是放到键盘上的,于是又想着向高逼格的苹果看齐,直接设置

android:imeOptions="actionSend"
android:inputType=“text”
确实键盘中出现了发送按钮,但是又出现了与需求不符的情况,按照以上设置,EditText中,无论内容多少,只会显示一行内容,用户复看起来很不方便,需求中需要满足EditText文字内容过多时,有固定高度,且能展示滑动条

至此不得不明白为什么安卓版本的微信,没有将发送按钮设置到键盘中~

 

总结:以上是我自己遇到问题的一点小小的见解,如有问题,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值