在 TextView -Android 中逐字母显示字符串

Posted

技术标签:

【中文标题】在 TextView -Android 中逐字母显示字符串【英文标题】:Display a String letter by letter in a TextView -Android 【发布时间】:2016-04-06 19:09:10 【问题描述】:

我有这个代码:

public void setText(String s)
    TextView tv= (TextView)HomeActivity.tf.getView().findViewById(R.id.textViewFragment);


    char c;
    for(int i=0; i< s.length(); i++)
        c= s.charAt(i);

        tv.append(String.valueOf(c));

        try
            Thread.sleep(100);
        catch(Exception e)
    

问题是我无法让 TextView 一个接一个地显示字母。循环完成并执行完所有内容后,即显示文本。

我想让它一个字母一个字母地显示出来,给 TextView 一个动画效果。

【问题讨论】:

试试tv.setText(String.valueOf(c)) 这对我不起作用。我使用 append() 因为我希望前面的字符留在那里。我想在每次追加之间刷新屏幕。 然后获取前面的文本并像tv.setText(tv.getText().toString()+String.valueOf(c))一样追加它 我试过了,没用。 我已经在这里找到了这个问题的答案。 Found solution here 【参考方案1】:

此代码有效,

    public void setText(final String s)
    
    TextView tv= (TextView)HomeActivity.tf.getView().findViewById(R.id.textViewFragment);
    final int[] i = new int[1];
    i[0] = 0;
    final int length = s.length();
    final Handler handler = new Handler()
    
        @Override
        public void handleMessage(Message msg) 
            super.handleMessage(msg);
            char c= s.charAt(i[0]);
            Log.d("Strange",""+c);
            tv.append(String.valueOf(c));
            i[0]++;
        
    ;

    final Timer timer = new Timer();
    TimerTask taskEverySplitSecond = new TimerTask() 
        @Override
        public void run() 
            handler.sendEmptyMessage(0);
            if (i[0] == length - 1) 
                timer.cancel();
            
        
    ;
    timer.schedule(taskEverySplitSecond, 1, 500);

【讨论】:

按原样使用此方法。只需通过您的onCreate() 拨打电话即可。 很高兴知道。干杯:)【参考方案2】:

以防万一有人仍在寻找更好的解决方案(带有动画字母),请尝试Fade-In TextView。

这个 TextView 库直接从原生 TextView 类继承其属性,这意味着支持所有原生 TextView 方法。实际上没有限制,包括多行支持。它还有一些自己的方法和属性,可以完全控制视图。

【讨论】:

【参考方案3】:

更简单

Thread thread = new Thread() 
    int i;

    @Override
    public void run() 
        try 
            for (i = 0; i < text.length(); i++)  // use your variable text.leght()
                Thread.sleep(1000);
                runOnUiThread(new Runnable() 
                    @Override
                    public void run() 
                        textView.setText(text.substring(0, i));
                    
                );
            
         catch (InterruptedException e) 
        
    
;

thread.start();

【讨论】:

以上是关于在 TextView -Android 中逐字母显示字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中逐行处理文本文件和连字符字符串

textview可以有不同颜色的字母吗? [复制]

如何以大写字母回显文本?

在报告中逐行检查

如何在 Python 中逐行打印字典?

golang 在#golang中逐行读取文件