代码:
import android.os.Bundle;
import android.app.*;
import android.view.*;
import android.content.*;
import android.graphics.*;
import android.widget.*;
public class MainActivity extends Activity {
private TextView mTextView1;
private EditText mEditText1;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView1 = (TextView)findViewById(R.id.output);
mEditText1 = (EditText)findViewById(R.id.input1);
mEditText1.setOnKeyListener(new EditText.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
mTextView1.setText(mEditText1.getText().toString());
return false;
}
});
}
}
问题:
mTextView1 无法实时响应mEditText1 的输入,必须依赖键盘上的回车键,删除键等才能显示。
猜想:
1.程序焦点被输入法夺取;
2.与OnKeyListener本身有关。
成果1:与return值无关。
相关资料:
1.return值:http://hi.baidu.com/solohac/item/4dc61dcfb68cd30cc710b247
这段代码主要说明的是如果在EditText中按下enter,则会读取EditText中的值,并显示在TextView中。但是这个return true/fasle 却是个关键。
SDK中这样描述:
Returns
True if the listener has consumed the event, false otherwise.
则现在的逻辑变成这样:如果按下的enter,则在EditText中显示,然后返回true,截断这个enter事件。如果按下的不是enter,则返回false,继续事件应有的流程。
这段代码主要说明的是如果在EditText中按下enter,则会读取EditText中的值,并显示在TextView中。但是这个return true/fasle 却是个关键。
SDK中这样描述:
Returns
True if the listener has consumed the event, false otherwise.
则现在的逻辑变成这样:如果按下的enter,则在EditText中显示,然后返回true,截断这个enter事件。如果按下的不是enter,则返回false,继续事件应有的流程。
2.OnKeyListener: http://wenku.baidu.com/view/8f7555c84028915f804dc25f.html
onKey()
来自View.OnKeyListener接口。当用户让焦点落在一个对象上后按下或释放设备上的一个键时,这个方法被调用。
成果2:
Register a callback to be invoked when a hardware key is pressed in this view. Key presses in software input methods will generally not trigger the methods of this listener.