1

我想在按钮按下时用字符填充 TextView 我写了这段代码,但它只写了一个字符?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button b = (Button) findViewById(R.id.btn);
    final TextView tv =(TextView) findViewById(R.id.txt1);

    b.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN){
                String s = tv.getText().toString();
                tv.setText( s + "E");
                return false;
            }
            return false;
        }
    });

}

如何在按钮状态关闭时用字符填充文本视图?

4

3 回答 3

1

好的..这是解决方案。尝试使用Handler.

Button b = (Button) findViewById(R.id.btn);
        final TextView tv = (TextView) findViewById(R.id.txt1);
        b.setOnTouchListener(new OnTouchListener() {
            private Handler mHandler;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    if (mHandler != null)
                        return true;
                    mHandler = new Handler();
                    mHandler.postDelayed(mAction, 500);
                    return false;
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    if (mHandler == null)
                       return true;
                    mHandler.removeCallbacks(mAction);
                    mHandler = null;
                    return false;
            }
                return false;
            }

            Runnable mAction = new Runnable() {
                @Override
                public void run() {                 
                    String s = tv.getText().toString();
                    tv.setText(s + "E");
                    mHandler.postDelayed(this, 500);
                }
            };
        });

参考。我希望这能帮到您。

于 2013-06-27T09:54:44.707 回答
1

你可以这样做:

制作一个布尔成员变量以用作填充 textview 的标志。在 on touch down 中,将该布尔值设置为 true,并启动一个设置文本的可运行文件,然后启动另一个可运行文件。这会创建一个循环。在 on touch up 中,将布尔值设置为 false,循环将停止。像这样的东西(未经测试):

private boolean mFillTextView = false;

@Override
public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN){
                mFillTextView = true;
                Handler mHandler= new Handler();
                mHandler.postDelayed(new MyRunnable(), 300);
                return false;
            }
            if (event.getAction() == MotionEvent.ACTION_UP){
                mFillTextView =false;
            }
            return false;
        }
    });

class MyRunnable implements Runnable{
    @Override
    public void run() {
        if (mFillTextView){
            mTextView.setText(mTextView.getText()+"a");
            mHandler.postDelayed(new MyRunnable(), 300);

        })};
    }
于 2013-06-27T10:00:27.787 回答
1

TextView您可以启动一个循环线程,当您收到MotionEvent.ACTION_DOWN事件时填充您的

然后,您可以使用MotionEvent.ACTION_UP事件来停止该线程运行

在您的线程中,您需要调用回 UI 线程,然后才能修改TextView

于 2013-06-27T10:00:47.013 回答