为什么我不能使用字符串ID android.R.string.share?

时间:2013-04-04 18:31:27

标签: android android-resources

它位于Android源代码中的values / strings.xml中 - 为什么它不在android.R中?

编辑:我指的是Android的内置字符串资源(android.R.string.…),而不是我自己项目的资源 - 例如,我可以使用android.R.string.cancel,我不能使用android.R.string.share,尽管它们中的两个在Android的源代码中被声明在同一个文件中

4 个答案:

答案 0 :(得分:1)

它们只是资源文件夹下的资源。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="share">hello</string>
</resources>

上面的资源在R.java文件中有一个条目,在你的包名下。你可以打开R.java并查看它。

    public static final int share=0x7f040000;

您可以将Strings.xml中的字符串称为

  R.String.share

R.strin.share是一个int。

你也可以把字符串作为

   String s= getResources().getString(R.string.share);

编辑:

http://developer.android.com/guide/topics/resources/accessing-resources.html#PlatformResources

查看上面链接标题访问平台资源

下的主题

Android包含许多标准资源,例如样式,主题和布局。要访问这些资源,请使用android软件包名称限定资源引用。

有关所有资源的列表,请查看链接

http://developer.android.com/reference/android/R.html

http://developer.android.com/reference/android/R.string.html

中的列表

enter image description here

答案 1 :(得分:1)

您正在编译哪个SDK版本? 请检查相同SDK版本的strings.xml。我认为目标SDK版本和strings.xml中存在一些不匹配(您指的是“共享”存在的位置)

但是我会建议在应用程序strings.xml中添加您自己的“share”字符串,以避免因Android碎片性质而导致不必要的问题。

答案 2 :(得分:0)

android.R是系统的R

您的R只是您自己的包名称中的R.因此,在引用它时,只需将其称为R.string.share而不是android.R.string.share

答案 3 :(得分:0)

这是因为它不是在android.R.string中定义的,而是在com.android.internal.R $ string中定义的。没有一些“黑客”就无法访问它。

   public static int getReflactField(String className,String fieldName){
       int result = 0;
       try {
           Class<?> clz = Class.forName(className);
           Field field = clz.getField(fieldName);
           field.setAccessible(true);
           result = field.getInt(null); 
       } catch (Exception e) {
           e.printStackTrace();
       }
       return result;
   }
   ...
   int share_id=getReflactField("com.android.internal.R$string", "share");
   if(share_id!=0)
       Toast.makeText(getContext(), ""+getResources().getString(share_id),0).show();

这在我的android 4.4和8.0设备上都有效

或者简单地使用 getResources().getString(Resources.getSystem().getIdentifier("share","string", "android"))