4 回答
您正在为哪个 SDK 版本编译?请检查相同SDK版本的strings.xml ..我认为目标SDK版本和strings.xml有一些不匹配(你指的是,“share”存在的地方)
但是,我建议在应用程序 strings.xml 中添加您自己的“共享”字符串,以避免由于 Android Fragmented 性质而导致的不必要的问题。
它们只是资源文件夹下的资源。
<?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 是一个整数。
你也可以得到字符串
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的列表
android.R 是系统的R
您的 R 只是您自己的包名称中的 R。因此,只需调用它R.string.share
而不是android.R.string.share
引用它时。
这是因为它不是在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"))