`
iaiai
  • 浏览: 2195269 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 制作输入法

 
阅读更多
android 制作输入法

效果如图:



在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>


配置好运行就可以了,然后在输入法配置那里选择上刚添加的输入法,然后在文本框输入的时候就可以选择自己添加的输入来输入内容了。
  • 大小: 20.7 KB
  • 大小: 18 KB
分享到:
评论

相关推荐

    安卓Android百度输入法皮肤-疯狂码字的快乐-《Write 2022升级版》

    请注意,皮肤基于官方版百度输入法制作,请勿在华为/一加/小米等定制版下使用。 百度输入法 / Android安卓版 ○ 安装方式 打开任一网盘链接下载皮肤文件,再使用文件管理器将皮肤移动至 baidu/ime/skins 之后到本地...

    QT输入法设计(New Release)

    Qt的可移植性使得输入法能轻松适应多种操作系统,包括Linux、Windows和Android等。 在Tiny6410开发板上测试通过,意味着这个输入法能够适应资源受限的环境。Tiny6410是一款基于Samsung ARM926EJ-S处理器的开发板,...

    点讯输入法 6.0词库制作工具

    其中,词库制作工具是该版本的一大亮点,它允许用户自定义和个性化自己的输入法词库,提高输入效率和准确性。 词库在输入法中起着核心作用,它是输入法理解用户意图并快速提供正确候选词的基础。点讯输入法6.0词库...

    自定义输入法

    标题中的“自定义输入法”指的是用户可以根据个人习惯或特殊需求创建自己的输入工具,这在...通过阅读博客文章和研究提供的示例代码,开发者可以逐步掌握自定义输入法的制作过程,从而实现更加高效、个性化的输入体验。

    一款安卓输入法源码

    安卓输入法通常基于Android的InputMethodService服务构建,它继承自Service类,负责处理用户输入事件并将其传递给应用。在这款源码中,我们可能看到PinyinIME作为输入法的服务类,它会实现InputMethodService中的...

    百度输入法五笔词库

    因此,有人专门制作了这个“百度输入法五笔词库”,旨在将五笔输入法与百度输入法完美融合,让五笔爱好者在安卓设备上也能享受到流畅的五笔输入体验。 五笔字型是一种基于汉字笔画和字形结构的输入法,通过将汉字...

    安卓Android源码——包含多种特效的demo,实现多种动画效果,抽屉效果、多种自定义的view、还有输入法.rar

    这份名为“安卓Android源码——包含多种特效的demo,实现多种动画效果,抽屉效果、多种自定义的view、还有输入法.rar”的压缩包,提供了一个宝贵的资源库,帮助开发者深入理解Android系统的底层机制,并学习如何在...

    AndroidROM制作移植及精简教程lite.pdf

    ### Android ROM 制作、移植及精简教程详解 #### 一、Android系统文件夹结构概览 在深入了解Android ROM的制作与精简之前,首先需要熟悉其基本的文件夹结构。一个完整的Android ROM通常包括以下关键部分: 1. **...

    mozc:Mozc-专为多平台设计的日语输入法编辑器

    Google Inc.版权所有2010-2021。 Mozc是日语输入法编辑器(IME),设计用于多平台,例如Android OS,Apple OS X,Chromium OS,GNU / Linux和Microsoft ...制作说明 :Android库和Linux桌面构建。 :OS X构建。 :Win

    Android emoji demo

    4. **输入法集成**:为了实现发送功能,开发者可能需要与Android系统的输入法进行交互,确保用户在输入框中输入或选择的emoji能被正确发送。这可能涉及到监听输入事件,解析文本内容,以及与输入法服务的通信。 5. ...

    Android应用源码之仿淘宝自定义键盘.zip

    本压缩包"Android应用源码之仿淘宝自定义键盘.zip"包含了实现这一功能的具体源代码,旨在帮助开发者理解和实践自定义键盘的制作过程。 首先,自定义键盘的核心在于创建一个输入法服务(InputMethodService)。在...

    android自定义软键盘--纯数字键

    在Android开发中,有时我们需要为应用创建一个特定功能的软键盘,例如只允许用户输入数字。本篇文章将探讨如何创建一个纯数字键的自定义软键盘。我们将从以下几个方面进行详细讲解: 1. **理解Android软键盘机制** ...

    九鼎创展s5p4418开发板android平台用户手册

    6. 烧写Android映像文件:本部分详细说明了在Ubuntu和Windows系统下如何安装fastboot工具、制作启动卡以及如何烧写映像文件。还包括了使用SD卡脱机更新映像文件的方法和在emmc中不存在bootloader时更新uboot的特定...

    自定义输入键盘,直接导入使用

    在Android开发中,自定义输入键盘是一个常见的需求,特别是在处理敏感信息时,为了增强安全性,开发者往往会使用自定义的安全软键盘。本项目提供了一个可以直接导入并使用的自定义键盘解决方案,适用于各种应用程序...

    AIDE教程系列1

    有的手机第一次打开AIDE时会提示新建一个android项目,可以点不。如上图,点击电脑图标后,会弹出出AIDE的工作区,如下图: 默认工作区弹出的内容是AIDE的项目文件管理器,值得一提是AIDE的项目文件管理器的默认...

    Android实现换肤的两种思路分析

    本文分析了Android实现换肤的两种思路。分享给大家供大家参考,具体如下: 这里来了解换肤实现及不同方案的差异和使用场合。 一、从功能上划分 1) 软件内置多个皮肤,用户不能修改; 2) 官方提供皮肤下载,用户使用...

    android基础定制

    3. **动画制作**:如果需要设置开机动画,需要将动画的每一帧图像提取出来,并按序存储在 `part0` 文件夹中;最后一帧的图像则存放在 `part1` 文件夹中。此外,还需要创建一个 `desc.txt` 文件来定义动画的播放参数...

Global site tag (gtag.js) - Google Analytics