如何动态设置字符串资源

时间:2017-02-23 03:35:13

标签: android android-resources

我有一个edittext和按钮,它将editText文本传递给另一个活动onClick,当涉及第二个活动时,它正在从主要活动接收文本。

我的问题是,我在String资源文件夹中有超过20个字符串名称,我必须打开与主要活动的edittext值匹配的特定字符串。 简而言之,我必须更改匹配字符串资源String

textview文本
<resources>
        <string name="app_name">sylb</string>
        <string name="title_activity_display">display</string>
        <string name="large_text">some_large_text</string>
        <string name="ds15mca21">second mca</string>
        <string name="ds15mca11">first mca</string>
        <string name="ds15mba21">second <b>mba</b>></string>
        <string name="ds15aut21">second <i>automobile</i></string>
        <string name="action_settings">Settings</string>
</resources>

显示代码

public class display extends AppCompatActivity {
        String code;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_display);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            Intent intent = getIntent();
            Bundle extras = intent.getExtras();
            code= extras.getString("keyName");
            TextView textView= (TextView) findViewById(R.id.textapp);

            textView.setText("R.string." + "ds" + code);
        }
    }

6 个答案:

答案 0 :(得分:1)

这将完成你的工作! 只需传递您修正的String而不是&#34; app_name&#34; (不要只使用R.string作为资源名称)

示例:如果我想获得

的值
 <string name="app_name">ItsCharuHereHiFolks</string>

你需要这样做

 final TextView textView = (TextView) findViewById(R.id.your_text_view);
 String string = getString(getResId("app_name", R.string.class));
 textView.setText(string);

   public static int getResId(String resName, Class<?> c) {

        try {
            Field idField = c.getDeclaredField(resName);
            return idField.getInt(idField);
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

答案 1 :(得分:0)

使用以下代码!

getResources().getString(resId)//resId is R.string.STRING_NAME

答案 2 :(得分:0)

你可以试试这个

textView.setText(getResources().getIdentifier("R.string." + "ds" + code,"string",getPackageName()));

答案 3 :(得分:0)

真的很容易。在你的班级中使用它

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

并简单地使用此

textView.setText(getStringResourceByName("ds" + code));

或者你可以简单地使用上面的类并提取任何字符串。

示例

  • 如果您想从资源

    下面 questions_en

    <string name="questions_en">Questions</string>

使用此

String question=getStringResourceByName("questions_en");
  

此外,在getStringResourceByName中使用整数而不是字符串   得到整理资源的方法。

     

getIdentifier (String name, String defType, String defPackage)做好工作!!

Credits

答案 4 :(得分:0)

虽然@ Charu的答案非常好且高效,可以执行id属于不同资源类型的通用任务,但如果您知道字符串资源名称并且您的任务仅与字符串相关,您仍然可以拥有更好的解决方案。

<强>步骤1

在您的调用Activity中

,请使用以下代码。

Intent intent = new Intent(this, newActivity.class);
intent.putExtra("StringResourceId", R.string.dsAbcXyz); //this step will directly pass the int value of your string resource without any iterations
startActivity(intent);

<强>步骤-2

然后在newActivity中,使用以下代码。

Intent prevIntent = getIntent();
int resId = prevIntent.getIntExtra("StringResourceId");
textView.setText(resId); //you can directly pass the int id to textview to display the relevant text
  

当您非常确定要作为参数传递的resourxe名称时,此方法可以正常工作。

     

但是如果你通过像服务器这样的随机来源获得你的名字   或者数据库,那么我建议你按照@ Charu的解决方案。

答案 5 :(得分:-1)

使用此

getResources().getIdentifier("ds" + code, "String", getPackageName());