title: How to make Dynamic change of TextVIew and UI in general?
body: <p>Good afternoon everyone </p>
  
  <p>So, I'm trying to dynamically change textview's properties.
  basically, I defined a Duration. and I want to my handler/runnable to append text to a textView until I reach the duration.</p>
  
  <pre><code>public class Dynamic_testActivity extends Activity
  {
      public Context      context         = null;
      public TextView     view            = null;
      public Handler      mHandler        = null;
      public long         startTime       = 0L;
      public final int    duration_millis = 10000;
  
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
  
          context = getApplicationContext();
  
          view    = (TextView)    findViewById(R.id.textView1);
          view.append("\n");
  
          mHandler = new Handler();
      }
  
      @Override
      protected void onStart() {
          super.onStart();
  
          startTime = System.currentTimeMillis();
  
          mHandler.post(new Runnable() {
              @Override
              public void run() {
                  view.append("Hell_yeah_!\n");
                  // 10 character lenght
              }
          });
      }
  }
  </code></pre>
  
  <p>So yes, it append the text once, because the run do so.
  But how could I make some kind of loop, without blocking the UI Thread, and append text until the end of the duration.</p>
  
  <p>That was the first step ...</p>
  
  <p>The second part now ... In fact, I Want to change the color of the text.
  using</p>
  
  <pre><code>Spannable WordtoSpan = new SpannableString(view.getText());        
  WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, view.getText().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  </code></pre>
  
  <p>I want to the color changing to be dynamic for the duration ... like a karaoke ...
  So, is it possible to make that in the runnable without having the UI Thread blocked until the end of the duration ? and How ?</p>
  
  <p>If anyone could explain the complet process ? or post some source code</p>
  
  <hr>
  
  <p>Solved.
  Here is a basic example...
  There is still a little trouble ... at the very beginning of the application, the whole textview is yellow, and after a second, it updates the display as it should be .
  If any one knows why, advices are welcome =)</p>
  
  <p>Note : there's only two simple Textview in the layout... Duration is in milliseconds... and there is 10 character in the dynamic textview to fit the duration ... So basically, one char = one second ...</p>
  
  <pre><code>public class Dynamic_testActivity extends Activity
  {
      public Context      context                                 = null;
      public TextView     view                                    = null;
      public TextView     view2                                   = null;
      public Handler      handler                                 = null;
      public long         start_time, current_time, elapsed_time  = 0L;
      public final int    duration                                = 10000;
      public int          end                                     = 0;
  
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
  
          context = getApplicationContext();
          view    = (TextView)    findViewById(R.id.textView1);
          view2   = (TextView)    findViewById(R.id.textView2);
          handler = new Handler();
      }
  
      @Override
      protected void onStart() {
          super.onStart();
  
          start_time   = Long.valueOf( System.currentTimeMillis() );
          current_time = start_time;
  
          handler.postDelayed(new Runnable() {
              @Override
              public void run() {
  
                  current_time = Long.valueOf( System.currentTimeMillis() );
                  elapsed_time = Long.valueOf(current_time) - Long.valueOf(start_time);
  
                  if ( elapsed_time &gt;= duration + 30 ) {
                      Toast.makeText(context, "Done", Toast.LENGTH_LONG).show();
                      //finish();
                  } else {
                      end = (int) (elapsed_time / 1000);
                      Spannable WordtoSpan = new SpannableString(view.getText());
                      WordtoSpan.setSpan(new ForegroundColorSpan(Color.YELLOW), 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  
                      view.setText(WordtoSpan);
                      view2.setText("time : " + elapsed_time);
                      handler.postDelayed(this, 10);
                  }
              }
          }, 10);
      }
  }
  </code></pre>