如何使用strings.xml分配stringid(动态)

时间:2012-03-21 18:53:12

标签: android android-layout android-activity

如何分配stringid动态,我已经在strings.xml文件中创建了字符串字段数。

的strings.xml

<string name="read_more_0">defautl message</string> 
<string name="read_more_1">first messages.</string> 
<string name="read_more_2">second messages.</string> 
<string name="read_more_3">third messages.</string> 

简单活动:

 public class dynamic_Activity extends Activity {
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);

           setContentView(R.layout.dynamic_layout_01);

          txtDisplay = (TextView) findViewById(R.id.textView1);  

          //getting position value from the previous activity
          int position = getIntent().getIntExtra("position", default_value); 

          if (position > 0)
          {  
          String _format = "read_more_" + String.valueOf(position);
          txtDisplay.setText(R.string._format); // how to assign the string id?

          } else {
          txtDisplay.setText(R.string.read_more_0); //by default
          }  
       }
    }

布局文件:

<LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="@string/dynamic_0" 
            android:textSize="12dp" />
    </LinearLayout>

3 个答案:

答案 0 :(得分:2)

在这种特殊情况下,我认为您应该考虑使用string array resource

答案 1 :(得分:1)

两种方法:

1)在类中声明一个map或switch语句,用于将位置链接到资源id。这样可以提供更好的性能。

2)如果您必须从动态字符串中获取资源,则可以使用getIdentifier方法。请注意,性能不是很好。

Resources resources = getResources();
int id = resources.getIdentifier("read_more_" + String.valueOf(position), "string", getPackageName());
String str = resources.getString(id);

答案 2 :(得分:0)

你不能。做

switch (position) {
case 0: txtDisplay.setText(R.string.read_more_0); break;
case 1: txtDisplay.setText(R.string.read_more_1); break;
// and so forth...
}