【转载】android软键盘的一些控制

摘要:
比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。

原文地址:http://blog.csdn.net/wang_shaner/article/details/8467688

"EditText + Button" 形成一个 "输入+按键响应" 的案例在android编程中是最常见不过的了。

但还有一些细节需要注意:

  1. 在EditText输入后,点击Button进行请求,软键盘应该自行消失
  2. 在EditText输入后,不点击Button进行请求,而是直接点击软键盘上的"回车",那么也应该能够正常响应请求
针对问题1,可以在响应Button的onClick事件中,主动将软键盘隐藏,加入如下代码即可
  1. InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
  2. imm.hideSoftInputFromWindow(mEditText.getWindowToken(),0);
针对问题2,可以在EditText的api doc中找到答案
  1. publicvoidsetOnEditorActionListener(TextView.OnEditorActionListenerl)
  2. Setaspeciallistenertobecalledwhenanactionisperformedonthetextview.Thiswillbecalledwhentheenterkeyispressed,orwhenanactionsuppliedtotheIMEisselectedbytheuser.Settingthismeansthatthenormalhardkeyeventwillnotinsertanewlineintothetextview,evenifitismulti-line;holdingdowntheALTmodifierwill,however,allowtheusertoinsertanewlinecharacter.
因此,只需要给EditText设置一个onEditorActionListener就好了,简单示例如下
  1. mEditText.setOnEditorActionListener(newTextView.OnEditorActionListener(){
  2. @Override
  3. publicbooleanonEditorAction(TextViewv,intactionId,KeyEventevent){
  4. //TODO这里做"回车"响应处理
  5. returntrue;
  6. }
  7. });
备注一下:TextView.OnEditorActionListener接口方法onEditorAction方法的第二个参数actionId,其可能的值在EditorInfo的说明中能够找到。列举如下:
IME_ACTION_DONE
IME_ACTION_GO
IME_ACTION_NEXT
IME_ACTION_NONE
IME_ACTION_PREVIOUS
IME_ACTION_SEARCH
IME_ACTION_SEND
IME_ACTION_UNSPECIFIED

软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:

  1. actionUnspecified 未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:【转载】android软键盘的一些控制第1张
  2. actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE 效果:【转载】android软键盘的一些控制第1张
  3. actionGo 去往,对应常量EditorInfo.IME_ACTION_GO 效果:【转载】android软键盘的一些控制第3张
  4. actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH 效果:【转载】android软键盘的一些控制第4张
  5. actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND 效果:【转载】android软键盘的一些控制第5张
  6. actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT 效果:【转载】android软键盘的一些控制第6张
  7. actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE 效果:【转载】android软键盘的一些控制第7张

下面已搜索为例,演示一个实例,修改main.xml如下:

Xml代码收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <EditText
  8. android:id="@+id/edit_text"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:imeOptions="actionSearch"/>
  12. </LinearLayout>

修改HelloEditText如下:

Java代码收藏代码
  1. packagecom.flysnow;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.view.KeyEvent;
  5. importandroid.widget.EditText;
  6. importandroid.widget.TextView;
  7. importandroid.widget.Toast;
  8. importandroid.widget.TextView.OnEditorActionListener;
  9. publicclassHelloEditTextextendsActivity{
  10. /**Calledwhentheactivityisfirstcreated.*/
  11. @Override
  12. publicvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. EditTexteditText=(EditText)findViewById(R.id.edit_text);
  16. editText.setOnEditorActionListener(newOnEditorActionListener(){
  17. @Override
  18. publicbooleanonEditorAction(TextViewv,intactionId,KeyEventevent){
  19. Toast.makeText(HelloEditText.this,String.valueOf(actionId),Toast.LENGTH_SHORT).show();
  20. returnfalse;
  21. }
  22. });
  23. }
  24. }

运行程序,点击回车(也就是搜索图标软键盘按钮)会显示该actionId.我们上面的每一个设置都会对应一个常量,这里的actionId就是那个常量值。

免责声明:文章转载自《【转载】android软键盘的一些控制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在Azure DevOps Server (TFS)的流水线中编译和测试Xcode移动应用(iPhone)WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

彻底搞定Android开发中软键盘的常见问题

软键盘显示的原理 软件盘的本质是什么?软键盘其实是一个Dialog。 InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或...

unity重写软键盘for Android NGUI

一 原因 以为某些原因,需要重写Unity游戏中Android的软键盘的样式,然而unity对android和ios的ios的软键盘都有封装,在Unity中TouchScreenKeyboard.Open可以打开一个软键盘,然而对这个软键盘的操作函数少的可怜,所以有了这篇文章. 二 目的 本文的主要目的是重写NGUI的UIInput,也就是TouchScr...

ios软键盘弹出时输入框fixed布局被遮挡问题

做一个类似于手机端QQ动态详情页面,该页面有一个置于页面底部的评论输入框,刚开始单纯的以为这没什么难的,使用fixed布局不就是So easy!么,在安卓上也是意料之中完美的效果,然并卵,在ios上有时输入框却被软键盘遮挡,经过在度娘上的多方查找,发现原来是ios对fixed布局有兼容问题,导致fixed布局不稳定,软键盘弹起时fixed布局可能会改为ab...

软键盘弹起,导致底部被顶上去

计算出可视界面的高度,当软键盘弹起时让底部元素隐藏掉, 当键盘收起时再让它显示,实在没办法时这种方法也不失为一种方法 1 var h=document.documentElement.clientHeight; 2 $(window).resize(function(){ 3 let height=document.documentElement....

uniapp开发支付宝小程序,ios软键盘会把底部fixed定位的输入框覆盖掉有效解决方法

这个问题应该可以定义为ios的兼容性、目前测试的只有在ios上才会有这种情况 之前百度找的用uniapp里面的参数输入框设置cursor-spacing="0" 或者等于其他数值、然后基本无效 解决方法就一行css代码就可以了、把外层高度设置为100vh,就不会出现刚刚的兼容性,我的是tbody设置的h:100vh,cont靠内容自己撑起来 然后我html...

Android浏览器软键盘中的回车(确认)会触发表单提交的问题解决办法

     最近在公司里做项目的时候遇到一个问题,开发出来的网页需要在Android手机中的浏览器中打开,当在表单中的文本框内输入内容时,如果这时点软键盘中的回车会导致表单被提交,而不是正常的点击按钮提交。     经上网查询了相关资料与自己的测试,下面发出解决的代码:     在表单的onSubmit事件中加入以下代码:     Javascript...