我基本上是想做这个简单的事情:我有一个Edittext和一个TextView。现在我想立即(逐个字符)显示在textview中的edittext中输入的文本。此外,当按下退格键并从editext中删除一个字符时,也应该在textview中发生。
简而言之:我想在textview中立即显示edittext中的所有内容。我怎么能这样做?
这是我尝试过的一些代码,但这对我不起作用。当我在使用Android 4.0的模拟器上运行它(并使用计算机键盘输入)时,每个字符在textview中显示两次,并且edittext中没有文本。 另一方面,当我使用Android 2.3.3的模拟器(并使用模拟器键盘进行输入)时,textview中没有文本,但edittext工作正常。
在onCreate()
中,我调用我的方法setListener()
。这看起来像这样:
private void setListener() {
mEdittext.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
String str = mTextview.getText().toString();
if(keyCode == KeyEvent.KEYCODE_DEL && str.length() > 0) {
str = str.substring(0, str.length()-1);
} else {
char newChar = (char)event.getUnicodeChar();
str = str.concat(Character.toString(newChar)) ;
}
mTextview.setText(str);
return true;
}
});
}
有任何解决此问题的想法吗?
答案 0 :(得分:6)
您可以使用TextWatcher
将TextView设置为输入文本:
TextWatcher watcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
mTextview.setText(mEdittext.getText().toString());
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
};
mEdittext.addTextChangedListener(watcher);
答案 1 :(得分:0)
试试这个:
@Override
protected void onStart() {
final EditText edit = (EditText) findViewById(R.id.editText1);
edit.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
TextView txt = (TextView) findViewById(R.id.textView1);
txt.setText(edit.getText().toString());
return false;
}
});
super.onStart();
}
答案 2 :(得分:0)
如果要在移动到下一个字段后打印到textview,可以使用onFocusChangeListner
//onCreate
TextView tv = (TextView) findViewById(R.id.textView1);
EditText et = (EditText) findViewById(R.id.editText1);
et.setOnFocusChangeListener(mylistener);
private OnFocusChangeListener mylistener = new OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if(!hasFocus)
{
tv.setText(et.getText().toString());
}
}
};
如果您想在输入密钥时动态更改文本,请使用:
et.addTextChangedListener(watcher);
TextWatcher watcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
if(s.length() > 0)
tv.setText(s.toString());
}
};
或
使用OnkeeyListener,如eickeee解释或TextWatcher的onTextChanged事件,如TronicZomB解释