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");}@Overridepublic View onCreateInputView() {Log.i("*********", "自定义输入法onCreateInputView");KeyboardView mkeyView = new KeyboardView(this);return mkeyView;}@Overridepublic View onCreateExtractTextView() {Log.i("*********", "自定义输入法onCreateExtractTextView");return super.onCreateExtractTextView();}@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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>


配置好运行就可以了,然后在输入法配置那里选择上刚添加的输入法,然后在文本框输入的时候就可以选择自己添加的输入来输入内容了。

更多相关文章

  1. android朗读英文
  2. 实例教程四:采用Pull解析器解析和生成XML内容
  3. android 输入键盘遮挡页面的问题
  4. 不用SDK manager 下载 Android(安卓)sdk 和 platform API(直接获
  5. Android单元测试
  6. Android单元测试
  7. 不用SDK manager 下载 Android(安卓)sdk 和 platform API(直接获
  8. android如何调用显示和隐藏系统默认的输入法
  9. 为Android内核添加新驱动,并添加到menuconfig菜单

随机推荐

  1. android客户端xmpp & smack & openfire简
  2. Android(安卓)This text field does not
  3. Android底层控件随键盘上移
  4. android webkit 网页标签的解析与预下载
  5. Android(安卓)StudioV3.2.1的两种模式及
  6. android手机屏幕横竖屏切换禁止调用生命
  7. 转载:Android中如何修改系统时间(应用程序
  8. Android(安卓)5.0(Lollipop)中的SurfaceT
  9. 【android】 百度地图应用开发(一)
  10. 初学Android——闪光灯当做手电筒使用