Android继承View自定义控件调用输入法

希望从一个View上调用输入法和接收输入法传过来的字符串,可以通过调用EditText这个widget。但是,如果要做出很炫很个性的输入法,就必须自己去和EditText一样连接输入法,介绍如下:
首先,定义一个继承自BaseInputConnection的类。输入法是通过commitText来提交选中字符。

public class MyBaseInputConnection extends BaseInputConnection{

	public MyBaseInputConnection(View targetView, boolean fullEditor) {
		super(targetView, fullEditor);
	}

	public static String tx="";

	//输入法程序就是通过调用这个方法把最终结果输出来的
	@Override
	public boolean commitText(CharSequence text, int newCursorPosition) {
		tx = text.toString();
		return true;
	}
}

BaseInputConnection相当于一个InputMethodService和View之间的一个通道。每当 InputMethodService产生一个结果时,都会调用BaseInputConnection的commitText方法,把结果传递出来。

之后,采用如下方式,呼出输入法,并且把自定义的BaseInputConnection通道传递给InputMethodService。

public class MyView extends XXView ...{
	//得到InputMethodManager
	InputMethodManager input = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

	//在你想呼出输入法的时候,调用这一句
	input.toggleSoftInput(0, 0);

	@Override
	//这个方法继承自View。把自定义的BaseInputConnection通道传递给InputMethodService
	public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
		return new MyBaseInputConnection(this, false);
	}
}

低级界面上面,自己调用输入法并接收输入法的输出结果,就是这样的。

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注