在 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 中逐字母显示字符串的主要内容,如果未能解决你的问题,请参考以下文章