R.string.ID 返回的是int 而不是 string(layout, color,drawable and so on)

时间:2023-02-04 18:43:41
Java code
String msg =R.string.menu_title;
获取menu_title的String值,但发现这样写报错,原因R.string.menu_title是int类型的,这个比较奇怪

为什么下边的这个可以获取?

Java code

TextView TV =new TextView(this);

TV.setText(R.string.menu_about_content);

 

分析原因:

R类只是保存资源的ID,是整形数字。
除了你写的方法可以设置外还可以通过如下代码直接获取
getResources().getString(R.string.menu_about_content)
TextView TV = new TextView(this); TV.setText(R.string.menu_about_content);//为什么? 因为TextView.setText支持资源索引方式赋值。(int resId)
getResources().getString(R.string.menu_about_content)
Context 还提供了一种简单的快捷方式,就是你可以直接调用getString(resId)。其实它内部也还是调用的 getResources().getString()
因此如果你是直接在 Activity 里获取字符串资源,可以直接调用父类的 getString(resId) 方法。在其它情境,需要先获取 Context 对象,再调用 Context 对象的 getString() 方法。
类似的方法还有getDrawable、getColor、getLayout 等等。它们没有提供快捷访问方式,需要先 getResources() ,再调用这些方法。
另外值得注意的是,这些方法必须保证是在应用被启动之后才能调用的。或者说,必须保证有一个窗体被被创建出来了。因此,不适合将 getResources() 一系列的方法写在静态代码块里面。或者作为程序的静态变量初始值。