请教各位大侠,我想基于一个普通的View(即不是Textview也不是EditText)实现类似于EditText的东西:
1. 点击出现软键盘。
2. 从键盘输入,然后选词,然后得到所选的中文。现在的问题是,我怎样才能得到所选(输入)的中文呢?public MyView(Context context) {
super(context);
mImm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
mRR = new ResultReceiver(new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, msg.toString());
}
});
....
}
public boolean onTouchEvent(MotionEvent event) {
mImm.showSoftInput(this, 0, mRR);
........
}是从ResultReceiver参数,还是从哪儿得到输入的结果呢?
1. 点击出现软键盘。
2. 从键盘输入,然后选词,然后得到所选的中文。现在的问题是,我怎样才能得到所选(输入)的中文呢?public MyView(Context context) {
super(context);
mImm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
mRR = new ResultReceiver(new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, msg.toString());
}
});
....
}
public boolean onTouchEvent(MotionEvent event) {
mImm.showSoftInput(this, 0, mRR);
........
}是从ResultReceiver参数,还是从哪儿得到输入的结果呢?
那里没有办法处理么?
其实我在做的是一个类似于浏览器的东西,将网页上的所有东西都用原始图形画在Android的一个View上。例如,当打开百度时,我就需要画一个搜索框。当用户点击这个搜索框时,弹出Android自己的输入法,当用户输入完毕,那么我需要将用户输入的文字(比如中文)传递给搜索框。现在我的问题就是如何能拿到用户的输入。答案应该就在InputMethod这一块,不过现在比较头大,很长时间没碰Android了,所以一时找不到。
public void onClick(View v) {
EditText edit_text = (EditText) findViewById(R.id.edit_text);
CharSequence edit_text_value = edit_text.getText();
setTitle("EditText的值:"+edit_text_value);
}
我的程序是用C++写的,现在将它移植到Android中来。
上面举例中的搜索框是我已经用c++实现好的,只是将它画在Android中。所以,从Android的角度来讲,其实就是画在View背景上的一个矩形而已。
我需要往这个矩形(我自己实现的编辑框)里输入中文。第一步调用软键盘(输入法),这很容易。但是我不知道下一步该怎么得到输入结果。从而传递给我自己的编辑框。
所以你也许需要继承实现BaseInputConnection,并用View.onCreateInputConnection创建出来。这样输入法commitText就会传递给你的编辑框但我觉得你这样做可能还是很麻烦,最好你的编辑框还是继承自EditText就是说整个页面都只有一个编辑框,用户点到哪里就出现在哪里,不知可行?
我按照你的意见如下实现:
1. 参照EditableInputConnection,作了一个BaseInputConnection继承类。
2. 给我自己的View继承类里添加了onCreateInputConnection方法。
3. 最后成功的在commitText在截取到了我要的字符串,虽然现在还有点小问题,不过这部分的目的已基本达到。另外你的第二个建议也给了我很多启发,但是这样做的有可能会使原程序的可移植性受到影响或者需要在C++和android之前传送很多数据用来协调。再次谢谢指导。
只是很惭愧啊,分不多,呵呵。
是的,是Android自带的日文输入。
我觉得通用的东西还是做方法类的,最好不要涉及到UI层,因为现在出的系统都是在UI上很灵活的,为了吸引用户,所以区别和限制都很多,但优点都是灵活和使用方便,所以如果说是一些数据分析和处理的功能,那做成通用的,与平台无关,这样比较好。然后UI,还是遵循平台本身来处理吧。
非常感谢。但其实我在这里面提到的编辑框严格意义上来讲并不完全属于UI范畴。
比如对一个浏览器,它网页(绘制/显示)部分显然不属于UI。如果这部分与平台关联太多,
那么它的可移植性将是非常差的。
最后发现日文也是可以在commitText里面截获的。
2. 给我自己的View继承类里添加了onCreateInputConnection方法。
3. 最后成功的在commitText在截取到了我要的字符串,虽然现在还有点小问题,不过这部分的目的已基本达到。如果还有不清楚的,请google一下EditableInputConnection,我记得有一篇Android文档中,有关于输入法的详细介绍。
我的QQ37896505