参考文件:
实现输入法的步骤:
输入法程序的核心是服务类,必须从InputMethodService继承。
让我们看一下实现基本输入法程序的步骤。
(1)创建一个从android.inputmethodservice.InputMethodService继承的类,称为输入法服务类。
([2)在AndroidManifest.xml文件中配置此服务类。
([3)编写用于显示软键盘的布局文件。
([4)重写InputMethodService类的onCreateInputView方法。
([5)onCreateInputView方法需要返回与步骤3中建立的布局文件相对应的View对象。返回之前,通常需要设置相应控件的事件,例如软键盘按钮的单击事件。
([6)编写代码,以响应输入法服务类或其他类中的软键盘中的按键事件,例如按钮单击事件,物理键盘事件等。
让我们实现一个简单的输入法程序。
第1步:创建一个名为simple_inputmethod的新Android项目。目录结构如下所示:


第2步:创建一个从InputMethodService继承的AndroidInputMethodService类,然后在Android.Manifest.xml文件中对其进行配置:
AndroidInputMethodService类:
package net.csdn.leigo.inputmethod;
import net.csdn.leigo.inputmethod.R;
import android.inputmethodservice.InputMethodService;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.Button;
public class AndroidInputMethodService extends InputMethodService implements
OnClickListener {
}
AndroidManifest.xml:
在配置输入法服务时必须设置
android.permission.BIND_INPUT_METHOD"权限,然后在标签中添加一个
"android.view.InputMethod" 动作。
在标签中添加一个标签以配置输入法,即,您可以看到我们在“语言和键盘”设置界面中编写的输入法,并指定了android:resource属性。

输入法资源ID。资源文件(method.xml)位于res \ xml目录中,代码如下:
的android:settingActivity属性
标签可以指定输入法设置窗口。
InputMethodSetting.java:
package net.csdn.leigo.inputmethod;
import android.app.Activity;
import android.os.Bundle;
public class InputMethodSetting extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setting);
}
}
setting.xml:
第3步:编写布局文件。该布局文件实际上是软键盘的布局。在此布局中,有5个水平排列的按钮。前四个用于输入4个字符串(标签的android:text属性的值),最后一个按钮用于隐藏软键盘:
keyboard.xml:
第4步:修改AndroidInputMethodService类的代码,首先覆盖onCreateInputView方法,然后在onCreateInputView方法中加载键盘和xml布局文件,并设置按钮click事件,最后返回软键盘的View对象
@Override
public View onCreateInputView() {
// 装载keyboard.xml文件
View view = getLayoutInflater().inflate(R.layout.keyboard, null);
// 设置布局中5个按钮的单击事件
view.findViewById(R.id.btn1).setOnClickListener(this);
view.findViewById(R.id.btn2).setOnClickListener(this);
view.findViewById(R.id.btn3).setOnClickListener(this);
view.findViewById(R.id.btn4).setOnClickListener(this);
view.findViewById(R.id.btn_hide).setOnClickListener(this);
Log.d(TAG, "onCreateInputView()");
// 返回View对象
return view;
}
注意:输入法界面(软键盘)不需要我们自己创建活动。此Activity由系统提供,我们只需要在Activity上显示View对象,即onCreateInputView方法的返回值。
最后一个需要处理按钮的单击动作,而AndroidInputMethodService类需要实现OnClickListener接口。
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_hide) {
// 隐藏软键盘
hideWindow();
} else {
Button button = (Button) v;
// 获得InputConnection对象
InputConnection inputConnection = getCurrentInputConnection();
if (button.getId() == R.id.btn1) {
// 设置预输入文本
// setComposingText方法的第2个参数值为1,表示在当前位置预输入文本
inputConnection.setComposingText(button.getText(), 1);
} else {
// 向当前获得焦点的EditText控件输出文本
// commitText方法第2个参数值为1,表示在当前位置插入文本
inputConnection.commitText(button.getText(), 1);
}
}
}您可以通过InoutConnection.setComposedText方法预先输入文本。预输入的文本通常在输入的文本下方显示一个下划线,直到被正式输入的文本替换为止,否则该下划线将始终存在。
运行项目以查看效果图:






经过测试,如果EditText的inputType属性是默认属性,则可以单击以输入,但如果是电话或电子邮件之类的其他属性,则单击无效。可以参考该文档,或者将在下一篇文章中对此进行介绍。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-353286-1.html
我看你还能嚣张到什么时候
放屁
看来只能只能当月光族了