管理两次资源名称 - 一种仅使用一个名称的方式 - Android
Managing twice a resource name - a way to work with only one name - Android
我的 class 中有一个常量,用于保存值的键:
public static final String CAR_NAME = "car_name";
public static final String CAR_NUMBER = "car_number";
values.xml
<string name="car_name">Tl5t</string>
<string name="car_name_tr">Tl5tTR</string>
<string name="car_number">45334234</string>
以及 return 正确资源 ID 的方法:
public void returnResourceId (String resource) {
if (state == 1){
resource = resource+"_tr";
}
return Resources.getSystem().getIdentifier(resource, "string",getPackageName() );
}
我正在使用这样的方法:
int resourceId = returnResourceId(CAR_NAME);
问题是我需要管理两次资源名称,一次在 class 常量中,一次在 values.xml
文件中。
我能以某种方式继续使用我的逻辑但只使用一个键吗?
我建议您不要这样做,因为它会比直接访问慢得多。也就是说,您可以通过查找资源的名称、附加您的后缀,然后查找带有 _tr 后缀的额外字符串的资源 ID 来完成此操作。
例如:
@StringRes
public int getResourceId(@StringRes int baseResourceId) {
// Assume baseResourceId == R.string.car_name
if (state == 1) {
final Resources res = getResources();
// Will return "car_name"
final String resourceName = res.getResourceEntryName(baseResourceId);
// Look up and return the integer ID for "car_name_tr"
return res.getIdentifier(resourceName + "_tr", "string", BuildConfig.APPLICATION_ID);
} else {
// Otherwise just return the input
return baseResourceId;
}
}
我的 class 中有一个常量,用于保存值的键:
public static final String CAR_NAME = "car_name";
public static final String CAR_NUMBER = "car_number";
values.xml
<string name="car_name">Tl5t</string>
<string name="car_name_tr">Tl5tTR</string>
<string name="car_number">45334234</string>
以及 return 正确资源 ID 的方法:
public void returnResourceId (String resource) {
if (state == 1){
resource = resource+"_tr";
}
return Resources.getSystem().getIdentifier(resource, "string",getPackageName() );
}
我正在使用这样的方法:
int resourceId = returnResourceId(CAR_NAME);
问题是我需要管理两次资源名称,一次在 class 常量中,一次在 values.xml
文件中。
我能以某种方式继续使用我的逻辑但只使用一个键吗?
我建议您不要这样做,因为它会比直接访问慢得多。也就是说,您可以通过查找资源的名称、附加您的后缀,然后查找带有 _tr 后缀的额外字符串的资源 ID 来完成此操作。
例如:
@StringRes
public int getResourceId(@StringRes int baseResourceId) {
// Assume baseResourceId == R.string.car_name
if (state == 1) {
final Resources res = getResources();
// Will return "car_name"
final String resourceName = res.getResourceEntryName(baseResourceId);
// Look up and return the integer ID for "car_name_tr"
return res.getIdentifier(resourceName + "_tr", "string", BuildConfig.APPLICATION_ID);
} else {
// Otherwise just return the input
return baseResourceId;
}
}