嗨,我想在初始屏幕上的初始图像上添加文本。我在图像上添加了单个文本,但我想在每次打开应用程序时更改文本。如何操作请告诉我。
我在显示的splash.xml中添加了单个textview。但是我想在每次打开应用程序时一次一一地显示list.xml中的所有项目。
<TextView
android:id="@+id/quote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your limitation—it's only your imagination."
android:textColor="#ffffff"
android:textSize="36sp"
android:layout_centerInParent="true"/>
在list.xml中
<string-array name="quote_array">
<item>Your limitation—it's only your imagination.</item>
<item>Great things never come from comfort zones.</item>
<item>The harder you work for something, the greater you’ll feel when you achieve it.</item>
</string-array>
答案 0 :(得分:1)
生成一个随机数,并从该随机位置的数组中获得一个项目。
示例代码:
TextView quote = findViewById(R.id.quote);
String[] quoteArray = getResources().getStringArray(R.array.quote_array);
int randomPosition = (int)(Math.random()*(quoteArray.length-1))
quote.setText(quoteArray[randomPosition]);
答案 1 :(得分:1)
您可以执行以下操作:
您创建一个从AsyncTask扩展的类:
public class MyAsyncTask extends AsyncTask<Void, String, Void> {
private String[] stringArray;
private TextView myTextView;
private long delay;
MyAsyncTask(String[] stringArray, long delay, TextView myTextView) {
this.stringArray = stringArray;
this.delay = delay;
this.myTextView = myTextView;
}
@Override
protected Void doInBackground(Void... voids) {
try {
for (String value : stringArray) {
Thread.sleep(delay);
publishProgress(value);
}
} catch (InterruptedException ex) {
// Handle interrupted exception
}
return null;
}
@Override
protected void onProgressUpdate(String... value) {
myTextView.setText(value[0]);
}
}
这使您可以在线程中执行代码时编辑textview。
从活动中运行asynctask,并通过参数将字符串列表,文本更改之间所需的时间(以毫秒为单位)和要修改的textview传递给参数:
TextView myTextView = findViewById(R.id.myTextView);
new MyAsyncTask(
getResources().getStringArray(R.array.quote_array),
5000,
myTextView).execute();
我希望它对您有所帮助。
答案 2 :(得分:0)
这取决于您要实现的目标。如果顺序无关紧要,您可以在每次启动应用程序时使用new Random.nextInt(stringArray.length() - 1);
来使用随机整数。但是,如果要按从0到最后的顺序显示字符串,则需要将先前的索引保留在任何存储中。我认为SharedPreferences
是更好的解决方案。
祝你好运!