Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 处理程序后延迟不在for循环中工作_Android_Handler - Fatal编程技术网

Android 处理程序后延迟不在for循环中工作

Android 处理程序后延迟不在for循环中工作,android,handler,Android,Handler,这段代码不起作用,只是把最后一句文字涂上颜色。如何使用handler.postdayed方法逐个为单词着色 谢谢。也许您可以尝试以下方法:每隔2秒递归调用setTextColor()方法 Spannable WordtoSpan; TextView tvView; public void btnStart(View v) { tvView = (TextView)findViewById(R.id.tvTest); changeColorOfText("I know ju

这段代码不起作用,只是把最后一句文字涂上颜色。如何使用handler.postdayed方法逐个为单词着色


谢谢。

也许您可以尝试以下方法:每隔2秒递归调用setTextColor()方法

    Spannable WordtoSpan;
TextView tvView;
public void btnStart(View v)
{
    tvView = (TextView)findViewById(R.id.tvTest);
    changeColorOfText("I know just how to whisper, And I know just how to cry,I know just where to find the answers.");

}
int sIndexOfWord;
int fIndexOfWord;
private void changeColorOfText(String sentences)
{
    String[] arrWords = sentences.split(" ");
    WordtoSpan = new SpannableString(sentences);

    int k = 1;
    for(String word : arrWords) {

        sIndexOfWord = sentences.indexOf(word);
        fIndexOfWord = sIndexOfWord + word.length();
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() { 
             public void run() { 
                WordtoSpan.setSpan(new BackgroundColorSpan(Color.YELLOW), sIndexOfWord, fIndexOfWord, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                tvView.setText(WordtoSpan); 
             } 
        }, 2000*k++);
    }

}
intk=0;
私有void setTxtColor(){
if(k
下面每1秒显示一次以绿色作为单词前缀的单词。 Textview将有hello!首先以绿色显示,延迟1秒后,下一个单词将以绿色附加到textview。这将重复,直到达到字符串s的长度。如果您不想追加,只需设置新词的文本即可 _tv.setText(文本);并删除附加部分

此外,我还使用了计时器,并在ui线程上设置了文本。您还可以使用处理程序

int k = 0;
private void setTxtColor(){
  if(k < arrWords.length){
      Handler handler = new Handler();
      handler.postDelayed(new Runnable() { 
           public void run() {
              sIndexOfWord = sentences.indexOf(arrWords[k]);
              fIndexOfWord = sIndexOfWord + word.length(); 
              WordtoSpan.setSpan(new BackgroundColorSpan(Color.YELLOW), sIndexOfWord, fIndexOfWord, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
              tvView.setText(WordtoSpan);
              k++;
              setTxtColor(); 
           } 
      }, 2000);
  }
}
字符串s;
int _计数=0//柜台
定时器;
图文电视;
字符串[]每个//保存数组中的每个单词
按钮b;
b=(按钮)findViewById(R.id.button1);
_tv=(TextView)findviewbyd(R.id.tv);
b、 setOnClickListener(新的OnClickListener()
{
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
//s=et.getText().toString();
s=“你好!你好吗”;
_tv.setText(“”);

对于(int i=0;i当用户单击单词时,是否希望所有单词的颜色都相同i希望在屏幕上以2秒的时间依次为每个单词上色time@oguz我想知道,在代码中,我可以暂停并播放颜色吗?我不明白你所说的暂停并播放颜色是什么意思不只是等待处理程序完成它的任务,而是在for each循环中将语句的部分涂成红色,随着迭代的不断进行,处理程序的作用域被创建并完成。只有在最后一次迭代中,处理程序才会执行并完成它的任务。
String s;
int _count=0;//counter
Timer   _t;
TextView _tv;
String[] each;//holds each word in an array
Button b;
b= (Button) findViewById(R.id.button1);
_tv = (TextView) findViewById( R.id.tv );
b.setOnClickListener(new OnClickListener()
{

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        //s=et.getText().toString();
        s="hello!. how are you";
        _tv.setText("");
        for(int i=0;i<s.length();i++)
        {
            each = s.split("\\s+");
        }
     _t = new Timer();

        _t.scheduleAtFixedRate( new TimerTask() {
                @Override
                public void run() {


                    runOnUiThread(new Runnable() //run on ui thread
                     {
                      public void run() 
                      { 
                          if(_count<=each.length-1)
                          {
                          SpannableString text = new SpannableString(each[_count]);  

                        text.setSpan(new ForegroundColorSpan(Color.GREEN), 0,text.length(), 0);  
                        _tv.append(text);
                        _tv.append(" ");
                         System.out.println("................"+each[_count]);
                        _count=_count+1;


                     }
                          else
                          {
                              _t.cancel();
                          }
                      }

                     });
                }
            }, 1000, 1000 ); //change to 2000 for 2 second delay.

}

});