Android Studio中如何获取values.xml的字符串数量并随机取值?
解决Android中随机获取values里字符串的问题
嘿,这个需求我之前做项目的时候刚好遇到过!Android确实没有直接的values.xml.size()方法,但有两种简便的方式可以实现你想要的效果,推荐第一种,省心又高效:
方法一:使用string-array(最推荐)
这是Android官方推荐的批量管理字符串的方式,完美适配你的需求:
修改values.xml,把字符串放进string-array
把你原来分散的<string>标签改成一个<string-array>,比如:<!-- values/values.xml --> <resources> <string-array name="random_strings"> <item>第一个随机字符串</item> <item>第二个随机字符串</item> <item>第三个随机字符串</item> <!-- 继续添加更多字符串 --> </string-array> </resources>在Java代码中随机获取
先拿到字符串数组,再通过数组长度生成随机索引,最后取出对应字符串:// 获取字符串数组 String[] randomStrings = getResources().getStringArray(R.array.random_strings); // 生成0到数组长度-1之间的随机索引 int randomIndex = ThreadLocalRandom.current().nextInt(randomStrings.length); // 获取随机字符串 String randomString = randomStrings[randomIndex];用
ThreadLocalRandom比直接new Random()更安全,尤其在多线程场景下;如果是在主线程,两种都能用,但前者是更优选择。
方法二:手动维护资源ID数组(适合已存在分散字符串的情况)
如果你不想修改现有的单个<string>标签,可以手动把每个字符串的资源ID放进一个int数组,然后通过数组长度来做随机:
在Java中定义资源ID数组
int[] stringIds = { R.string.string1, R.string.string2, R.string.string3, // 新增字符串时要手动添加对应的R.string.xxx };随机获取字符串
int randomIndex = ThreadLocalRandom.current().nextInt(stringIds.length); String randomString = getResources().getString(stringIds[randomIndex]);这种方法的缺点是每次新增字符串都要手动更新数组,容易遗漏,所以更推荐第一种方法。
总结一下,方法一的string-array是最简便且易维护的方案,完全满足你获取字符串数量并随机取值的需求~
内容的提问来源于stack exchange,提问作者Ola Kveli
相关产品推荐
相关产品推荐

