Xamarin Android访问strings.xml字符串资源报错求解决方案
安卓端Xamarin Forms多语言资源加载失败解决办法
嘿,我看你已经折腾了好一阵了,清理重建、删文件夹这些基础操作都试过了,咱们从两个核心问题入手解决:
1. 先搞定「Ambiguous reference」歧义引用的问题
这个提示说明你的Resource.String里出现了重复的资源ID,十有八九是Resource.Designer.cs生成出问题了。你可以这么操作:
- 找到安卓项目Properties文件夹下的
Resource.Designer.cs,手动删掉它 - 右键安卓项目选择「生成」,Visual Studio会自动重新生成一个干净的
Resource.Designer.cs,重复引用的问题就能解决
2. 替换错误的资源获取方式
你现在用的Resources.System.GetText()是用来获取安卓系统自带的资源字符串的,根本不是你自己项目里Strings.xml里的内容!这才是报错String resource ID #0x7f070040的关键原因。
正确的做法是用应用上下文的Resources来获取:
- 如果是在Activity类里,直接写:
BarcodeScanner.TopText = Resources.GetString(Resource.String.barcodescanner_toptext); - 如果是在ViewModel这类非Activity的类里,需要先拿到应用上下文:
var appContext = Android.App.Application.Context; BarcodeScanner.TopText = appContext.Resources.GetString(Resource.String.barcodescanner_toptext);
3. 验证多语言切换逻辑(可选)
确保你切换语言的代码是正确的,比如切换到德语的示例:
// 设置德语 locale var deLocale = new Java.Util.Locale("de"); Java.Util.Locale.Default = deLocale; var config = new Android.Content.Res.Configuration(); config.Locale = deLocale; Android.App.Application.Context.Resources.UpdateConfiguration(config, Android.App.Application.Context.Resources.DisplayMetrics); // 重启当前页面让语言生效 var mainActivity = (MainActivity)Android.App.Application.Context; mainActivity.Finish(); mainActivity.StartActivity(mainActivity.Intent);
最后再来一次彻底的清理部署
- 清理整个解决方案
- 删除安卓项目的
bin和obj文件夹 - 卸载手机上的旧应用
- 重新生成并部署到设备
按这个流程走下来,应该就能解决你的问题了!
内容的提问来源于stack exchange,提问作者SirArt
相关产品推荐
相关产品推荐

