我是Android编程的新手。我点击按钮时发生以下代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = (Button) findViewById(R.id.morse_btn);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
loopCode();
}
});
}
称之为:
public void loopCode()
{
String code = "Hello There";
TextView view = (TextView) findViewById(R.id.code_txt);
String s = "";
for(int i = 0; i < code.length(); i++)
{
s+=code.charAt(i);
view.setText(s);
try {
TimeUnit.SECONDS.sleep(1);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
但是当我在手机上运行时,直到for循环完成后才会附加文本,即我按下按钮,几秒钟后,整个字符串“Hello There”出现。
如何让它一次写一个字符,就像打字机一样。
由于
答案 0 :(得分:1)
您需要使用view.append("")
将新文本附加到现有文本。
试试这段代码:
int i = 0; //declare this globally
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(i != 10) {
text.append(" " + i);
i++;
handler.postDelayed(this, 1000);
}
}
}, 1000);
}
此代码将每隔一秒向TextView
附加一个新数字,直到达到计数10.您可以应用相同的逻辑。
<强> [编辑] 强>
试试这个:
String code = "Hello There"; //declare variable globally
int i = 0; //declare globally
TextView view; //declare globally
public void loopCode()
{
view = (TextView) findViewById(R.id.code_txt);
//String s = "";
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if(i != code.length()) {
view.append(" " + code.charAt(i));
i++;
handler.postDelayed(this, 1000);
}
}
}, 1000);
}
}
不要忘记在全球范围内声明int i = 0
和String code = "Hello There"
。
答案 1 :(得分:0)
在TextView中存在2个不同的方法setText。
当你在setText中放入变量int时,android尝试在相同代码中的classe R变量中找到String。 要解决此问题,请使用String.valueOF(...)
将int强制转换为字符串了解更多; http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#valueOf(int)
试
public void loopCode()
{
String code = "Hello There";
TextView view = (TextView) findViewById(R.id.code_txt);
String s = "";
for(int i = 0; i < code.length(); i++)
{
view.setText(String.valueOf(i));
try {
TimeUnit.SECONDS.sleep(1);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}