【发布时间】:2020-03-01 03:39:01
【问题描述】:
我正在尝试使用在名为 values-es 的文件夹中创建的字符串数组变量,但是当我尝试调用它时,它会显示 cannot find symbol variable myStrings2。我不确定为什么它不起作用,因为我所做的只是将所有内容从我的strings.xml 复制到我的strings.xml (es) 版本并更改了数组名称。
我正在尝试使用 xml 文件中的 myStrings 和 myStrings2,因此根据系统语言是什么,它将显示适当的语言
我在两个不同的文件中使用了它们,ColorAdapter(在 getElementFromColors 函数中)和PaletteActivity(在 onCreate() 中)并在两个文件中都收到了错误消息
颜色适配器
package edu.temple.coloractivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Locale;
public class ColorAdapter extends BaseAdapter {
ArrayList<Integer> colors;
Context context;
public ColorAdapter(Context context){
this.context=context;
colors = new ArrayList<Integer>();
int retrieve []=context.getResources().getIntArray(R.array.myColors);
for(int i:retrieve)
{
colors.add(i);
}
}
@Override
public int getCount() {
return colors.size();
}
@Override
public Object getItem(int args) {
return colors.get(args);
}
@Override
public long getItemId(int args) {
return args;
}
public String getElementFromColors(int position){
String CurrentLang = Locale.getDefault().getLanguage();
if(CurrentLang=="es"){
String retrieve[] = context.getResources().getStringArray(R.array.myStrings2);
return retrieve[position];
}else{
String retrieve[] = context.getResources().getStringArray(R.array.myStrings);
return retrieve[position];
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=LayoutInflater.from(context);
convertView=inflater.inflate(android.R.layout.simple_spinner_dropdown_item, null);
TextView txv=(TextView)convertView.findViewById(android.R.id.text1);
txv.setBackgroundColor(colors.get(position));
txv.setText(getElementFromColors(position));
return convertView;
}
}
PaletteActivity
package edu.temple.coloractivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.media.session.PlaybackState;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.Locale;
public class PaletteActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String CurrentLang = Locale.getDefault().getLanguage();
setTitle("Palette Activity");
final Spinner spinner = findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.myColors, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
if(CurrentLang=="es"){
ArrayAdapter<CharSequence> stringNames = ArrayAdapter.createFromResource(this,R.array.myStrings2, android.R.layout.simple_spinner_item);
stringNames.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}else{
ArrayAdapter<CharSequence> stringNames = ArrayAdapter.createFromResource(this,R.array.myStrings, android.R.layout.simple_spinner_item);
stringNames.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
spinner.setAdapter(new ColorAdapter(this));
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position == 0){
view.setBackgroundResource(R.color.white);
}
else if(position == 1){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",1);
PaletteActivity.this.startActivity(i);
}else if(position == 2){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",2);
PaletteActivity.this.startActivity(i);
}else if(position == 3){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",3);
PaletteActivity.this.startActivity(i);
}else if(position == 4){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",4);
PaletteActivity.this.startActivity(i);
}else if(position == 5){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",5);
PaletteActivity.this.startActivity(i);
}else if(position == 6){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",6);
PaletteActivity.this.startActivity(i);
}else if(position == 7){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",7);
PaletteActivity.this.startActivity(i);
}else if(position == 8){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",8);
PaletteActivity.this.startActivity(i);
}else if(position == 9){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",9);
PaletteActivity.this.startActivity(i);
}else if(position == 10){
view.setBackgroundResource(R.color.white);
Intent i = new Intent(PaletteActivity.this, CanvasActivity.class);
i.putExtra("position",10);
PaletteActivity.this.startActivity(i);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
CanvasActivity
package edu.temple.coloractivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Locale;
public class CanvasActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_canvas);
String CurrentLang = Locale.getDefault().getLanguage();
TextView text = findViewById(R.id.newColor);
final View newBackground;
newBackground = this.getWindow().getDecorView();
System.out.println(Locale.getDefault().getLanguage());
Intent i = getIntent();
int pos = i.getIntExtra("position",0);
if(pos == 1){
newBackground.setBackgroundResource(R.color.silver);
if(CurrentLang=="es"){
text.setText("Plata");
}
else{
text.setText("Silver");
}
}else if(pos == 2){
newBackground.setBackgroundResource(R.color.pink);
if(CurrentLang=="es"){
text.setText("Rosado");
}
else{
text.setText("Pink");
}
}else if(pos == 3){
newBackground.setBackgroundResource(R.color.red);
if(CurrentLang=="es"){
text.setText("Rojo");
}
else{
text.setText("Red");
}
}else if(pos == 4){
newBackground.setBackgroundResource(R.color.orange);
if(CurrentLang=="es"){
text.setText("Naranja");
}
else{
text.setText("Orange");
}
}else if(pos == 5){
newBackground.setBackgroundResource(R.color.yellow);
if(CurrentLang=="es"){
text.setText("Amarillo");
}
else{
text.setText("Yellow");
}
}else if(pos == 6){
newBackground.setBackgroundResource(R.color.green);
if(CurrentLang=="es"){
text.setText("Verde");
}
else{
text.setText("Green");
}
}else if(pos == 7){
newBackground.setBackgroundResource(R.color.blue);
if(CurrentLang=="es"){
text.setText("Azul");
}
else{
text.setText("Blue");
}
}else if(pos == 8){
newBackground.setBackgroundResource(R.color.indigo);
if(CurrentLang=="es"){
text.setText("índigo");
}
else{
text.setText("Indigo");
}
}else if(pos == 9){
newBackground.setBackgroundResource(R.color.violet);
if(CurrentLang=="es"){
text.setText("Violeta");
}
else{
text.setText("Violet");
}
}else if(pos == 10){
newBackground.setBackgroundResource(R.color.brown);
if(CurrentLang=="es"){
text.setText("Marrón");
}
else{
text.setText("Brown");
}
}
}
}
values-es 文件夹中的strings.xml
<resources>
<string name="app_name">Color Activity</string>
<string name="Color">Color</string>
<string-array name="myStrings2">
<item>Selecciona un color</item>
<item>Plata</item>
<item>Rosado</item>
<item>Rojo</item>
<item>Naranja</item>
<item>Amarillo</item>
<item>Verde</item>
<item>Azul</item>
<item>Índigo</item>
<item>Violeta</item>
<item>Marrón</item>
</string-array>
</resources>
strings.xml
<resources>
<string name="app_name">Color Activity</string>
<string name="Color">Color</string>
<string-array name="myStrings">
<item>Select a color</item>
<item>Silver</item>
<item>Pink</item>
<item>Red</item>
<item>Orange</item>
<item>Yellow</item>
<item>Green</item>
<item>Blue</item>
<item>Indigo</item>
<item>Violet</item>
<item>Brown</item>
</string-array>
</resources>
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="silver" type="color">#c0c0c0</color>
<color name="pink" type="color">#ffc0cb</color>
<color name="red" type="color">#ff0000</color>
<color name="orange" type="color">#ffa500</color>
<color name="yellow" type="color">#ffff00</color>
<color name="green" type="color">#00ff00</color>
<color name="blue" type="color">#0000ff</color>
<color name="indigo" type="color">#4b0082</color>
<color name="violet" type="color">#7f00ff</color>
<color name="brown" type="color">#654321</color>
<color name="white" type="color">#FFFFFF</color>
<integer-array name="myColors">
<item>@color/white</item>
<item>@color/silver</item>
<item>@color/pink</item>
<item>@color/red</item>
<item>@color/orange</item>
<item>@color/yellow</item>
<item>@color/green</item>
<item>@color/blue</item>
<item>@color/indigo</item>
<item>@color/violet</item>
<item>@color/brown</item>
</integer-array>
</resources>
已修复:
通过以下方式解决:
1.将项目模式改为安卓模式
2.右键点击values文件夹
3.将文件命名为字符串
4.选择区域设置作为限定符
5.选择语言
6.点击确定
7.在翻译xml中输入任何内容
它应该将两个strings.xml 文件放在一个strings 文件夹中。与 strings.xml 相比,当 strings.xml (es) 不在单独的文件夹中时,我发现它可以工作
【问题讨论】: