600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android手动显示软键盘以及软键盘设置发送按钮的注意事项

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

时间:2021-09-22 20:35:57

相关推荐

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

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

一、先说一下显示软键盘

我们的布局显示样式

除了点击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() {@Overridepublic 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文字内容过多时,有固定高度,且能展示滑动条

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。