Android res/values/array的用法

1,建立array.xml文件

首先在res/values/ 文件夹里 new-ValueResource file点击后命名为 array.xml
注意:这里名字并不是一定要写为array.xml,这样写只是一个约定,安卓里控件的查找都是通过R文件里的id实现的.

2,用法

2.1 用于单纯的表示一组字符串 string-array
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="home_service_title">
        <item >Elder</item>
        <item >Utiluties</item>
        <item >Hosl&amp;Cli</item>   <!-- 特殊字符要转义-->
        <item> Passport</item>
    </string-array>
</resources>

通过String[] titles =getResources().getStringArray(R.array.home_service_title);就可以会的含有文件里定义的所有数组元素.

 2.2用于单纯的表示一组数字 integer-array
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="home_service_number">
        <item >1</item>
        <item >2</item>
        <item >3</item>
        <item >4</item>
    </integer-array>
</resources>

通过int[] numbers =getResources().getIntArray(R.array.home_service_title);就可以会的含有文件里定义的所有数组元素.
2.3 用来表示一组图片位置的引用integer-array

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="home_service_image">
        <item >@mipmap/u16</item>
        <item >@mipmap/u16</item>
        <item >@mipmap/u21</item>
        <item >@mipmap/u16</item>
    </integer-array>
</resources>

通过代码:

TypedArray mTypedArray = getResources().obtainTypedArray(R.array.home_service_image);
  for (int i = 0; i <getResources().getIntArray(R.array.home_service_image).length; i++) {
    int imageId=mTypedArray.getResourceId(i, R.mipmap.u23);//第一个参数为 :所取图片在数组中的索引,第二个参数为:未找到时,返回的默认值id。
}
    mTypedArray.recycle();//用完记得要recycle

根据索引 i 获得每个图片的id后就可以

       imageView.setImageResource(imageId);  //  给imageView设置图片 

总结通过integer-array存储图片位置只是一种方法,array文件的用法很灵活,这里只是为了介绍存储图片总结的文章,因为array文件存储极为灵活,同时也可以用来作为二维数组的引用.

 getResources().getStringArray(R.array.name);//获得String[]
  getResources().getIntArray(R.array.name);//获得int[]
  TypedArray mTypedArray = getResources().obtainTypedArray(R.array.home_service_image);//获得任意类型

  mTypedArray. mTypedArray.getResourceId(int index, int defValue);//获取R.array.home_service_image)里index索引下的对象
  mTypedArray.recycle();//mTypedArray用完记得要recycle

有兴趣可以看一下http://blog.youkuaiyun.com/x0343/article/details/17114837可以有点启发

Android 中,你可以通过 `Resources` 系统来获取定义在 `res/values/arrays.xml`(或 `array.xml`)中的 `<string-array>` 资源,并将其加载为 Kotlin/Java 的字符串数组(`Array<String>` 或 `Array<CharSequence>`)。 下面我将为你 **详尽演示如何定义和读取 string-array**,并转换为标准数组--- ### ✅ 步骤 1:定义 `arrays.xml` 文件 在 `res/values/arrays.xml` 中定义一个字符串数组(如果文件不存在,请创建它): ```xml <!-- res/values/arrays.xml --> <resources> <string-array name="theme_options"> <item>浅色模式</item> <item>深色模式</item> <item>跟随系统</item> </string-array> <string-array name="language_options"> <item>中文</item> <item>English</item> <item>日本語</item> <item>한국어</item> </string-array> </resources> ``` > 💡 注意:文件名可以是 `arrays.xml`、`strings.xml` 或任意 `.xml`,只要放在 `res/values/` 下即可。 --- ### ✅ 步骤 2:在 Fragment 或 Activity 中获取并转为数组 #### ✅ Kotlin 示例代码 ```kotlin class SettingsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // 方法 1:直接获取 String Array(推荐) val themeArray = resources.getStringArray(R.array.theme_options) // 结果:Array<String> // 打印测试 for (item in themeArray) { Log.d("ThemeOption", item) } // 可以用于 AlertDialog 等 showThemeDialog(themeArray) } private fun showThemeDialog(options: Array<String>) { MaterialAlertDialogBuilder(requireContext()) .setTitle("选择主题") .setItems(options) { _, which -> Toast.makeText(context, "选择了:${options[which]}", Toast.LENGTH_SHORT).show() } .show() } } ``` --- ### ✅ 其他使用场景示例 #### 🔹 在 Activity 中使用: ```kotlin class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val languages = resources.getStringArray(R.array.language_options) Log.d("Languages", languages.contentToString()) } } ``` #### 🔹 在任意 Context 类中使用(如自定义类): ```kotlin class MySettingsManager(context: Context) { private val resources = context.resources fun getThemeOptions(): Array<String> { return resources.getStringArray(R.array.theme_options) } } ``` --- ### ⚠️ 注意事项 | 问题 | 解决方法 | |------|----------| | `R.array.xxx` 找不到 | 确保 `arrays.xml` 放在 `res/values/` 目录下 | | 获取的是 `CharSequence[]`? | 使用 `getStringArray()` 返回的是 `Array<String>`,不是 `CharSequence[]` | | 修改后未生效 | 清理项目:`Build > Clean Project` | --- ### 🔄 转换说明 - `resources.getStringArray(R.array.xxx)` → 返回 `Array<String>`(Kotlin)或 `String[]`(Java) - 如果你需要 `List<String>`,可以这样转换: ```kotlin val list = resources.getStringArray(R.array.theme_options).toList() ``` 或者可变列表: ```kotlin val mutableList = resources.getStringArray(R.array.theme_options).toMutableList() ``` --- ### ✅ 完整流程总结 1. ✅ 在 `res/values/arrays.xml` 中定义 `<string-array>` 2. ✅ 使用 `resources.getStringArray(R.array.your_array_name)` 3. ✅ 得到 `Array<String>`,可用于 UI 显示、对话框、Spinner 等 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值