2

我基本上是在尝试做这个简单的事情:我有一个 Edittext 和一个 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;
        }
    });
}

有什么想法可以解决这个问题吗?

4

3 回答 3

6

您可以使用 将TextWatcherTextView 设置为输入文本:

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);
于 2013-08-21T14:15:30.153 回答
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();
}
于 2013-08-21T14:20:25.520 回答
0
  1. 如果要在移动到下一个字段后打印到 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());
        }
    }
    };
    
  2. 如果您想在输入键时动态更改文本,请使用:

    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());           
    }
    

    };

或者

使用像 eickeee 解释的 OnKeyListener 或像 TronicZomB 解释的 TextWatcher 的 onTextChanged 事件

于 2013-08-21T15:18:38.233 回答