Моя программа должна использовать спиннер, чтобы показать список названий цветов, и иметь его цвет фона. Например, на показанном изображении красный цвет должен иметь черный текст с надписью «Красный» для его указания. https://i.stack.imgur.com/BT0dW.jpg
У меня есть android:entries="@array/myStrings"
, который показывает текст первого цвета (без цвета, простой белый фон) в режиме дизайна, но после запуска программы текст не отображается для любого из цветов.
строк. xml
<resources>
<string name="app_name">Color Activity</string>
<string-array name="myStrings">
<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>
цветов. 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/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>
MainActivity
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
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 java.util.ArrayList;
public class ColorActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
final View newBackground;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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);
spinner.setAdapter(new ColorAdapter(this));
newBackground = this.getWindow().getDecorView();
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
ArrayList<Integer> colors;
colors = new ArrayList<Integer>();
int retrieve []= getResources().getIntArray(R.array.myColors);
for(int i:retrieve)
{
colors.add(i);
}
if(position == 0){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.silver);
}else if(position == 1){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.pink);
}else if(position == 2){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.red);
}else if(position == 3){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.orange);
}else if(position == 4){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.yellow);
}else if(position == 5){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.green);
}else if(position == 6){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.blue);
}else if(position == 7){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.indigo);
}else if(position == 8){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.violet);
}else if(position == 9){
view.setBackgroundResource(R.color.white);
newBackground.setBackgroundResource(R.color.brown);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
Цветовой адаптер:
import android.content.Context;
import android.graphics.Color;
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;
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 retrieve []=context.getResources().getStringArray(R.array.myColors);
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.setTextSize(20f);
txv.setText(getElementFromColors(position));
return convertView;
}
}