android开发分享Android:如何从资源中获取string?

我想有两种语言的用户界面和单独的string值为他们在我的资源文件resvaluesstrings.xml

 <string name="tab_Books_en">Books</string> <string name="tab_Quotes_en">Quotes</string> <string name="tab_Questions_en">Questions</string> <string name="tab_Notes_en">Notes</string> <string name="tab_Bookmarks_en">Bookmarks</string> <string name="tab_Books_ru">Книги</string> <string name="tab_Quotes_ru">Цитаты</string> <string name="tab_Questions_ru">Вопросы</string> <string name="tab_Notes_ru">Заметки</string> <string name="tab_Bookmarks_ru">Закладки</string> 

现在我需要在我的应用程序中dynamic地检索这些值:

 spec.setContent(R.id.tabPage1); String pack = getPackageName(); String id = "tab_Books_" + Central.lang; int i = Central.Res.getIdentifier(id, "string", pack); String str = Central.Res.getString(i); 

我的问题是, i = 0 。 这个代码是从这个链接 。

为什么它不起作用?

    您引用的链接似乎与在运行时生成的string一起工作。 strings.xml中的string不会在运行时创build。 你可以通过

     String mystring = getResources().getString(R.string.mystring); 

    getResources()Context类的一个方法。 如果你在一个ActivityService (扩展上下文)内,你可以像这个片段一样使用它。

    还要注意整个语言的依赖关系可以由android框架来处理 。 只需为每种语言创build不同的文件夹。 如果英语是您的默认语言,只需将英文string放入res/values/strings.xml 。 然后创build一个新的文件夹values-ru ,并将具有相同名称的俄语string放到res/values-ru/strings.xml 。 从这一点上,androidselect正确的一个取决于你的设备语言环境,无论是当你调用getString()或通过@string/mystring引用XML中的@string/mystring 。 来自res/values/strings.xml是后备文件,如果你没有覆盖用户区域的文件夹,这个文件夹将被用作默认值。

    请参阅本地化和提供资源以获取更多信息。

    我有同样的问题。 但是下面的代码适用于我:validation你的packageName是否正确。 你必须参考你的Android应用程序的根包。

     private String getStringResourceByName(String aString) { String packageName = getPackageName(); int resId = getResources().getIdentifier(aString, "string", packageName); return getString(resId); } 

    不仅来自活动:

      public static String byIdName(Context context, String name) { Resources res = context.getResources(); return res.getString(res.getIdentifier(name, "string", context.getPackageName())); } 

     getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName())) 

    我会添加一些东西给leonvian的解决scheme,所以如果有任何机会在资源中找不到string(返回值0,这不是一个有效的资源代码),该函数可能会返回一些东西:

     private String getStringResourceByName(String aString) { String packageName = getPackageName(); int resId = getResources() .getIdentifier(aString, "string", packageName); if (resId == 0) { return aString; } else { return getString(resId); } } 

    更简单的方法是在活动中使用getString()函数。

     String myString = getString(R.string.mystring); 

    参考: http : //developer.android.com/guide/topics/resources/string-resource.html

    我认为这个function是在最近的Android版本中添加的,任何知道历史的人都可以对此进行评论。

    如果你没有一个Activity引用,你可以这样使用你的上下文:

     getContext().getString(R.string.your_string_name); 

    还有一组预定义的Androidstring,比如“Ok”,“Cancel”等等 – 所以你不必声明全部。 他们可以简单地通过:

     getString(android.R.string.ok) 

    (在这种情况下,“确定”string)。 顺便说一句,还有其他的Android资源,例如图标图像等

     Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount); 

    从string获取资源ID的简单方法。 在这里,resourceName是在XML文件中包含的可绘制文件夹中的资源ImageView的名称。

     int resID = getResources().getIdentifier(resourceName, "id", getPackageName()); ImageView im = (ImageView) findViewById(resID); Context context = im.getContext(); int id = context.getResources().getIdentifier(resourceName, "drawable", context.getPackageName()); im.setImageResource(id); 

    简单的使用这个:

     string appName = getString(R.string.app_name); 

    要了解更多信息,请参阅: http : //developer.android.com/guide/topics/resources/string-resource.html

      以上就是android开发分享Android:如何从资源中获取string?相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/524040.html

      (0)
      上一篇 2020年12月13日
      下一篇 2020年12月13日

      精彩推荐