android - 一般如何动态更改 TextVIew 和 UI?

标签 android user-interface dynamic textview

大家下午好

因此,我正在尝试动态更改 textview 的属性。 基本上,我定义了一个持续时间。我希望我的处理程序/可运行程序将文本附加到 textView,直到达到持续时间。

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

所以是的,它附加了一次文本,因为运行是这样做的。 但是我怎样才能在不阻塞 UI 线程的情况下进行某种循环,并在持续时间结束之前附加文本。

这是第一步...

现在是第二部分……事实上,我想改变文本的颜色。 使用

Spannable WordtoSpan = new SpannableString(view.getText());        
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 0, view.getText().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

我希望颜色在持续时间内保持动态变化……就像卡拉 OK 一样…… 那么,是否可以在不阻塞 UI 线程直到持续时间结束的情况下使其成为可运行的?以及如何?

如果有人能解释一下完整的过程?或者发布一些源代码


已解决。 这是一个基本的例子...... 还是有点麻烦。。。在应用程序的最开始,整个textview都是黄色的,一秒钟后,它更新了应该显示的内容。 如果有人知道为什么,欢迎提出建议 =)

注意:布局中只有两个简单的 Textview……持续时间以毫秒为单位……动态 TextView 中有 10 个字符来适应持续时间……所以基本上,一个字符 = 一秒……

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

最佳答案

在你的 run() 方法中,你可以调用 mHandler.post(this) (或者使用 postDelayed 来延迟它)

API 级别 14 中有属性更改动画,但如果您的目标是较低版本,请重复使用 postDelayed 以逐步更改文本的颜色。

关于android - 一般如何动态更改 TextVIew 和 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8388341/

相关文章:

Java GUI 分配,不知道如何解决?

java - 可以禁用 GUI 吗?

r - 动态选择数据框中的行

c# - 在 RavenDB 中存储/检索动态数据

android - roboto-android 和 roboto-unhinted 之间有什么区别?

android - 将额外的 Intent 信息从 Activity 传递到 View

android - 测试 Android 应用程序 GUI

android - Android 5 的 audit.log 在哪里?

android - 微调器的 Onitemclicklistner 如何将 id 传递给 android 中的下一个微调器

c++ - 初始化二维对象数组