- 浏览: 2195269 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
android 制作输入法
效果如图:
在res目录下新建文件夹xml,在xml文件夹下新建一个文件input_method.xml
然后有三个类分别是:
ImfService.java
CandidateView.java
KeyboardView.java
代码如下:
ImfService.java
CandidateView.java
KeyboardView.java
最后在AndroidManifest.xml配置文件中添加上这个service
配置好运行就可以了,然后在输入法配置那里选择上刚添加的输入法,然后在文本框输入的时候就可以选择自己添加的输入来输入内容了。
效果如图:
在res目录下新建文件夹xml,在xml文件夹下新建一个文件input_method.xml
<?xml version="1.0" encoding="utf-8"?> <input-method xmlns:android="http://schemas.android.com/apk/res/android" />
然后有三个类分别是:
ImfService.java
CandidateView.java
KeyboardView.java
代码如下:
ImfService.java
import android.inputmethodservice.InputMethodService; import android.util.Log; import android.view.View; /** * * <br/> * Title: ImfService.java<br/> * E-Mail: 176291935@qq.com<br/> * QQ: 176291935<br/> * Http: iaiai.iteye.com<br/> * Create time: 2013-2-20 下午5:07:34<br/> * <br/> * * @author 丸子 * @version 0.0.1 */ public class ImfService extends InputMethodService { public void onInitializeInterface() { Log.i("*********", "自定义输入法onInitializeInterface"); } @Override public View onCreateInputView() { Log.i("*********", "自定义输入法onCreateInputView"); KeyboardView mkeyView = new KeyboardView(this); return mkeyView; } @Override public View onCreateExtractTextView() { Log.i("*********", "自定义输入法onCreateExtractTextView"); return super.onCreateExtractTextView(); } @Override public View onCreateCandidatesView() { Log.i("*********", "自定义输入法onCreateCandidatesView"); CandidateView mCandView = new CandidateView(this); return mCandView; } }
CandidateView.java
import android.content.Context; import android.graphics.Color; import android.inputmethodservice.InputMethodService; import android.view.Gravity; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; /** * * <br/> * Title: CandidateView.java<br/> * E-Mail: 176291935@qq.com<br/> * QQ: 176291935<br/> * Http: iaiai.iteye.com<br/> * Create time: 2013-2-21 上午10:27:28<br/> * <br/> * * @author 丸子 * @version 0.0.1 */ public class CandidateView extends LinearLayout { private InputMethodService service; public CandidateView(Context context) { super(context); service = (InputMethodService) context; setBackgroundColor(Color.GRAY); setOrientation(LinearLayout.HORIZONTAL); Button btnLeft = new Button(context); btnLeft.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnLeft.setText("<"); addView(btnLeft); LinearLayout layout = new LinearLayout(context); layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1)); TextView tv = new TextView(context); tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); tv.setTextColor(Color.BLACK); tv.setGravity(Gravity.CENTER | Gravity.CENTER_VERTICAL); tv.setText("测试内容啦..."); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pickSuggestionManually(1); } }); layout.addView(tv); addView(layout); Button btnRight = new Button(context); btnRight.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnRight.setText(">"); addView(btnRight); } public void pickSuggestionManually(int mSelectedIndex) { service.getCurrentInputConnection().commitText("A", 0); // 往输入框输出内容 service.setCandidatesViewShown(false); // 隐藏 CandidatesView } }
KeyboardView.java
import android.app.Service; import android.content.Context; import android.inputmethodservice.InputMethodService; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; /** * * <br/> * Title: KeyboardView.java<br/> * E-Mail: 176291935@qq.com<br/> * QQ: 176291935<br/> * Http: iaiai.iteye.com<br/> * Create time: 2013-2-21 上午10:29:12<br/> * <br/> * * @author 丸子 * @version 0.0.1 */ public class KeyboardView extends LinearLayout { private InputMethodService service; public KeyboardView(Context context) { super(context); service = (InputMethodService) context; setOrientation(LinearLayout.HORIZONTAL); Button btnA = new Button(context); btnA.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnA.setText("A"); btnA.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service.setCandidatesViewShown(true); } }); addView(btnA); Button btnB = new Button(context); btnB.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnB.setText("B"); btnB.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service.setCandidatesViewShown(true); } }); addView(btnB); Button btnC = new Button(context); btnC.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); btnC.setText("C"); btnC.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { service.getCurrentInputConnection().commitText("C", 0); // 往输入框输出内容 } }); addView(btnC); service.setCandidatesViewShown(false); } }
最后在AndroidManifest.xml配置文件中添加上这个service
<service android:name="com.xxx.core.server.ImfService" android:label="丸子输入法" android:permission="android.permission.BIND_INPUT_METHOD"> <intent-filter> <action android:name="android.view.InputMethod" /> </intent-filter> <meta-data android:name="android.view.im" android:resource="@xml/input_method" /> </service>
配置好运行就可以了,然后在输入法配置那里选择上刚添加的输入法,然后在文本框输入的时候就可以选择自己添加的输入来输入内容了。
发表评论
-
带你深入理解 FLUTTER 中的字体“冷”知识
2020-08-10 23:40 624本篇将带你深入理解 Flutter 开发过程中关于字体和文 ... -
Flutter -自定义日历组件
2020-03-01 17:56 1099颜色文件和屏幕适配的文件 可以自己给定 import ... -
Dart高级(一)——泛型与Json To Bean
2020-02-23 19:13 988从 Flutter 发布到现在, 越来越多人开始尝试使用 Da ... -
flutter loading、Progress进度条
2020-02-21 17:03 1165Flutter Progress 1 条形无固定值进度条 ... -
Flutter使用Https加载图片
2020-02-21 01:39 1003Flutter使用Https加载图片 使用http加载图片出 ... -
flutter shared_preferences 异步变同步
2020-02-21 00:55 838前言 引用 在开发原生iOS或Native应用时,一般有判断上 ... -
Flutter TextField边框颜色
2020-02-19 21:31 924监听要销毁 myController.dispose(); T ... -
flutter Future的正确用法
2020-02-18 21:55 798在flutter中经常会用到异步任务,dart中异步任务异步处 ... -
记一次Flutter简单粗暴处理HTTPS证书检验方法
2020-02-18 14:13 948最近在做Flutter项目到了遇到一个无解的事情,当使用Ima ... -
flutter 获取屏幕宽度高度 通知栏高度等屏幕信息
2019-07-27 08:39 1325##MediaQuery MediaQuery.of(con ... -
关于flutter RefreshIndicator扩展listview下拉刷新的问题
2019-07-10 19:40 1109当条目过少时listview某些嵌套情况下可能不会滚动(条目 ... -
flutter listview 改变状态的时候一直无限添加
2019-07-10 16:01 773setstate的时候会一直无限的调用listview.bui ... -
Flutter Android端启动白屏问题的解决
2019-07-09 00:51 1505问题描述 Flutter 应用在 Android 端上启动时 ... -
Flutter中SnackBar使用
2019-07-08 23:43 765底部弹出,然后在指定时间后消失。 注意: build(Bui ... -
Flutter 之点击空白区域收起键盘
2019-07-08 18:43 1780点击空白处取消TextField焦点这个需求是非常简单的,在学 ... -
Flutter 弹窗 Dialog ,AlertDialog,IOS风格
2019-07-08 18:04 1369import 'package:flutter/mate ... -
flutter ---TextField 之 输入类型、长度限制
2019-07-08 14:30 2313TextField想要实现输入类型、长度限制需要先引入impo ... -
【flutter 溢出BUG】键盘上显示bottom overflowed by 104 PIXELS
2019-07-08 11:13 1542一开始直接使用Scaffold布局,body:new Colu ... -
解决Flutter项目卡在Initializing gradle...界面的问题
2019-07-07 12:53 862Flutter最近很火,我抽出了一点时间对Flutter进行了 ... -
关于android O 上 NotificationChannel 的一些注意事项
2019-07-04 11:47 931最近在适配android O,遇到个问题,应用中原本有设置界面 ...
相关推荐
请注意,皮肤基于官方版百度输入法制作,请勿在华为/一加/小米等定制版下使用。 百度输入法 / Android安卓版 ○ 安装方式 打开任一网盘链接下载皮肤文件,再使用文件管理器将皮肤移动至 baidu/ime/skins 之后到本地...
Qt的可移植性使得输入法能轻松适应多种操作系统,包括Linux、Windows和Android等。 在Tiny6410开发板上测试通过,意味着这个输入法能够适应资源受限的环境。Tiny6410是一款基于Samsung ARM926EJ-S处理器的开发板,...
其中,词库制作工具是该版本的一大亮点,它允许用户自定义和个性化自己的输入法词库,提高输入效率和准确性。 词库在输入法中起着核心作用,它是输入法理解用户意图并快速提供正确候选词的基础。点讯输入法6.0词库...
标题中的“自定义输入法”指的是用户可以根据个人习惯或特殊需求创建自己的输入工具,这在...通过阅读博客文章和研究提供的示例代码,开发者可以逐步掌握自定义输入法的制作过程,从而实现更加高效、个性化的输入体验。
安卓输入法通常基于Android的InputMethodService服务构建,它继承自Service类,负责处理用户输入事件并将其传递给应用。在这款源码中,我们可能看到PinyinIME作为输入法的服务类,它会实现InputMethodService中的...
因此,有人专门制作了这个“百度输入法五笔词库”,旨在将五笔输入法与百度输入法完美融合,让五笔爱好者在安卓设备上也能享受到流畅的五笔输入体验。 五笔字型是一种基于汉字笔画和字形结构的输入法,通过将汉字...
这份名为“安卓Android源码——包含多种特效的demo,实现多种动画效果,抽屉效果、多种自定义的view、还有输入法.rar”的压缩包,提供了一个宝贵的资源库,帮助开发者深入理解Android系统的底层机制,并学习如何在...
### Android ROM 制作、移植及精简教程详解 #### 一、Android系统文件夹结构概览 在深入了解Android ROM的制作与精简之前,首先需要熟悉其基本的文件夹结构。一个完整的Android ROM通常包括以下关键部分: 1. **...
Google Inc.版权所有2010-2021。 Mozc是日语输入法编辑器(IME),设计用于多平台,例如Android OS,Apple OS X,Chromium OS,GNU / Linux和Microsoft ...制作说明 :Android库和Linux桌面构建。 :OS X构建。 :Win
4. **输入法集成**:为了实现发送功能,开发者可能需要与Android系统的输入法进行交互,确保用户在输入框中输入或选择的emoji能被正确发送。这可能涉及到监听输入事件,解析文本内容,以及与输入法服务的通信。 5. ...
本压缩包"Android应用源码之仿淘宝自定义键盘.zip"包含了实现这一功能的具体源代码,旨在帮助开发者理解和实践自定义键盘的制作过程。 首先,自定义键盘的核心在于创建一个输入法服务(InputMethodService)。在...
在Android开发中,有时我们需要为应用创建一个特定功能的软键盘,例如只允许用户输入数字。本篇文章将探讨如何创建一个纯数字键的自定义软键盘。我们将从以下几个方面进行详细讲解: 1. **理解Android软键盘机制** ...
6. 烧写Android映像文件:本部分详细说明了在Ubuntu和Windows系统下如何安装fastboot工具、制作启动卡以及如何烧写映像文件。还包括了使用SD卡脱机更新映像文件的方法和在emmc中不存在bootloader时更新uboot的特定...
在Android开发中,自定义输入键盘是一个常见的需求,特别是在处理敏感信息时,为了增强安全性,开发者往往会使用自定义的安全软键盘。本项目提供了一个可以直接导入并使用的自定义键盘解决方案,适用于各种应用程序...
有的手机第一次打开AIDE时会提示新建一个android项目,可以点不。如上图,点击电脑图标后,会弹出出AIDE的工作区,如下图: 默认工作区弹出的内容是AIDE的项目文件管理器,值得一提是AIDE的项目文件管理器的默认...
本文分析了Android实现换肤的两种思路。分享给大家供大家参考,具体如下: 这里来了解换肤实现及不同方案的差异和使用场合。 一、从功能上划分 1) 软件内置多个皮肤,用户不能修改; 2) 官方提供皮肤下载,用户使用...
3. **动画制作**:如果需要设置开机动画,需要将动画的每一帧图像提取出来,并按序存储在 `part0` 文件夹中;最后一帧的图像则存放在 `part1` 文件夹中。此外,还需要创建一个 `desc.txt` 文件来定义动画的播放参数...