位置: 编程技术 - 正文

Android学习 - 自定义输入法(android怎么学)

编辑:rootadmin

推荐整理分享Android学习 - 自定义输入法(android怎么学),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:如何自学android开发,android自学之路,如何自学android开发,如何自学android开发,android自学之路,android自学之路,如何自学android开发,如何自学android开发,内容如对您有帮助,希望把文章链接给更多的朋友!

输入法的例子和源代码看了不少时间了,看得头很晕,很郁闷。静下心来把整个代码想了一遍,其实大部分代码都在处理绘制界面,以及事件的处理,核心代码很少,都被底层封装得很完美了。先看看一般输入法的界面:

分为两个部分,上部分是候选窗口(CandidateView),用来显示候选词,现在常用的输入法都有这个功能,如在搜狗、google输入法中输入abc,输入框中就会显示很多相关联的中文词。下部分就是软键盘了,这个没什么好说的。

输入法中核心类是InputMethodService,其次就是:CandidateView和KeyboardView。

CandidateView为候选窗口,InputMethodService在启动过程中会调用接口publicView onCreateCandidatesView(),在这个方法中把CandidateView对象返回后,InputMethodService内部会将其布局到相应的位置。

在android中没有CandidateView父类,得自己从头写,一般的做法是:

通过方法public voidsetService(InputMethodService listener)将Service类传进来,然后再通过publicvoid setSuggestions(List<String> suggestions…)方法将候选词列表传递过来,CandidateView将其显示到界面上,用户选择结束后,再通过service的方法pickSuggestionManually(mSelectedIndex),将选择的候选词在列表中的序号传递回去。至此,CandidateView就完成了它神圣的使命。

android中KeyboardView有一个通用类,继承它可以通过简单的配置文件就显示出很专业软键盘。在源代码中,它绝大部分代码都在做绘制工作和事件处理,不过就其本质功能来说是相当地简单,用户摁下软键盘上的某个键后,它把这个键所代表的&#;传递给InputMethodService类也完成了它的使命。InputMethodService在public View onCreateInputView()方法中获得该View。

InputMethodService就是输入法的核心了,该类是一个Service,跟其它默默无闻的Service不同的是,它是一个带有View的Service。其内部有几个个重要的接口:InputMethodImpl、InputMethodSessionImpl和InputConnection。

InputMethodService通过这几个类跟系统和输入框进行交互的。

1、输入框从InputMethodService获取信息是通过InputConnection来实现的,在启动输入法时,InputConnection由客户端控件创建,并传递给输入法应用,由输入法应用调用,进行信息反馈。

2、InputMethod接口定义了一套操纵输入法应用的方法。如bindInput、hideInput、startInput等。为了系统安全,这类接口只有系统可以访问,客户端控件无法直接调用这个接口。所有的输入法应用都需要客户端控件具有BIND_INPUT_METHOD权限,作为系统的安全机制,否则将无法与输入法服务交互。

3、InputMethodSession作为InputMethod的辅助接口类,为客户端控件开放了可直接调用的函数接口。包括向输入法应用分发键盘事件,更新光标位置,更新编辑区域内选择的问题信息等。客户端控件通过IIputMethodSession对于输入法应用的交互是单向的,即只能向输入法应用传递信息,无法获取信息。

Android学习 - 自定义输入法(android怎么学)

以上几个点是从网上copy过来的,感觉这几点对于理解InputMethodService特别有用。代码看得太多反而看不清本质,这几个类中最实用的是InputConnection的。

通过KeyboardView和CandidateView,InputMethodService类已经获得了想要的内容,然后通过这个方法把&#;传递给输入框。

先来一个CandidateView,设想的布局如下:

这个View中不进行任何自绘制,用android现有的View,两边各一个按钮(Button),用来滚动多个候选词,中间显示候选词(TextView),为了方便CandidateView继承RelativeLayout的内部类,便于加入子控件和控制,setService和setSuggestions两个方法可以不用,反正是内部类,不过为了配合上面的说明加上:

上面最重要的是加粗字体的那两行,View的布局还是花费了很多代码。KeyboardView的布局预想如下:

就两个按钮,点if时往输入框中输出if(){},if(){}else if(){},while时往输入框中输出while(){},这个类同样是继承于RelativeLayout的内部类:

CandidateView默认是不显示的,所以需要调用InputMethodService的setCandidatesViewShown()方法。

接下来把helloIme的代码贴出来:

代码写完,再来写配置文件,在res目录下面建立一个新目录xml,然后创建一个method.xml:

设置Manifest.xml,在AndroidManifest.xml中加入:

直接运行程序,eclipse输出如下Log:

安装成功了,还需在模拟器上进行设置:

点击settings->Language & keyboard,在下部出现了一个test,右边有个checkbox,选上它。并设置默认输入法为test。

找一个有输入框的应用,最简单到写短消息的画面,左键长按输入框,会弹出一个输入法选择提示框,点进去就会看到刚才创建的输入法了,点击右边的单选框,漂亮的hello输入法就展现在面前了:

demo

文章标题 使用Chrome来调试你的AndroidApp个人一直对Chrome情有独钟,Chrome除了更快之外,对开发者的支持更友好。内置强大的DeveloperTools,相信Web开发简直爱不释手

阿里面试题——如何实现微信“附近的人”功能? 一个面试题如果让你实现微信的附近的人功能,你会怎么做?​初期实现:客户端固定时间发送经纬度(x,y)到服务器s,服务器存储每个登陆的用户的

activity之间传值,serializable问题 activity之间传,代码如下:AppointMentInfo2info=(AppointMentInfo2)datas.get(position);Intentintent=newIntent(C1_AppointmentActivityT.this,C2_WriteAppointmentAty.class);intent.putExtra(info,inf

标签: android怎么学

本文链接地址:https://www.jiuchutong.com/biancheng/376670.html 转载请保留说明!

上一篇:关于获取本机ip的问题(获取本地ip地址失败)

下一篇:文章标题(文章标题用几号字体)

  • 印花税申报是含税收入还是不含税收入
  • 税收筹划分为哪几类
  • 合伙企业的费用在何处扣除
  • 哪些项目需要交环保税
  • 新准则金融资产科目名称
  • 车票抵扣怎么做账
  • 固定资产清理时残值怎么处理
  • 固定资产入股交什么税
  • 少提的税金如何做账
  • 异地提供建筑服务
  • 减半征收怎么算
  • 固定资产盘盈怎么算
  • 企业收回报废产品合法吗
  • 企业事故赔偿支出可以抵税吗
  • 资产负债表越来越少了是怎么回事
  • 取得专用发票不交增值税
  • 金融企业三大使命是什么
  • 劳保用品计入福利费嘛
  • 企业间拆借应收利息记哪个科目?
  • 以银行存款缴纳企业所得税所引起的变动为
  • 付佣金代扣个人所得税税前列支
  • 无法偿还的应付款项予以转账
  • 1000元的打印机双十一满减可以减150吗少
  • 民间非营利组织会计制度会计科目
  • 固定资产评估增值后如何入账
  • 固定资产的专票可以抵扣吗
  • 实习生短期意外保险能企业所得税前扣除吗?
  • php自定义变量
  • rsync inotify sersync
  • 配置eAccelerator和XCache扩展来加速PHP程序的执行
  • 凯恩kane
  • 增值税会自动申报吗
  • 应付职工薪酬会产生暂时性差异吗
  • 雷瓦老板
  • 低代码框架开发
  • php 截断
  • 长期借款的主要成本包括
  • day01-GUI坦克大战01
  • phpcms使用教程
  • 企业向慈善机构捐款会计分录
  • 电缆租赁发票开具属于什么项目
  • 个人能去税务局开劳务费发票吗
  • 增值税与消费税中关于包装物押金规定的异同点
  • 城镇土地使用税征收标准及计算方法
  • mysql事务类型
  • phpcms二次开发教程
  • 残保基金什么时候申报
  • 无形资产减值准备是什么科目
  • 行政单位可以对外进行投资吗?
  • 资产负债表中的固定资产怎么算
  • 水利建设基金应税项是什么
  • 三证合一后税务登记机关
  • 入股投资的钱能取出来吗
  • 白条抵库现象
  • 已抵扣进项怎么转出
  • 固定资产进项税率
  • 新会计准则贷款计提贷款减值准备的比例
  • 从事国家重点扶持的公共基础项目
  • 企业发生亏损,可在( )年内连续弥补
  • 可以自行开具增值税专用发票的行业有哪些
  • 会计科目费用类
  • 非税收入定额票据是什么
  • windows许可证即将过期怎么办知乎
  • centos 安装chia
  • srv32.exe - srv32进程是什么文件 有何作用
  • gcasInstallHelper.exe是什么进程 作用是什么 gcasInstallHelper进程查询
  • PQV2ISECURITY.EXE - PQV2ISECURITY是什么进程 有什么用
  • linux怎么清除内存
  • linux三种用户权限
  • 场景切换方式
  • cocos2dx游戏有哪些
  • Android从零单排02_Eclipse搭建Android环境01
  • opengl mc
  • js字符串转为json
  • java中的锁机制
  • 手把手教你打造班级主题环境 培训后心得
  • 河南省国税电子普通发票发票真伪查询系统
  • 税票上的开票员是谁
  • 企业年检里的纳税是什么
  • 无纸化同义词
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设