2015-02-19 11 views
0

У меня есть ListView с именами цветов (массив строк, хранящихся в отдельном xml). Как изменить фон моего приложения в зависимости от того, какой цвет в списке я нажал? У меня есть функция, которая отображает тост-сообщение в зависимости от кликаемого элемента, но я не знаю, как преобразовать его в функцию изменения цвета фона.Изменить цвет фона приложения, в зависимости от выбранного элемента списка

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View view, int position, long id) { 

      Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
+0

возможно дубликат [Переключение приложений по всей теме программно?] (Http://stackoverflow.com/questions/4663752/switching-application-wide-theme-programmatically) – tachyonflux

ответ

0

Внутри OnItemClickListener вы можете изменить цвет в зависимости от текста элемента ListView.

Чтобы решить эту проблему, вам просто нужно использовать if-else, проверяя значение TextView и затем меняя цвет. Я предполагаю, что у вас нет цветовых ресурсов, поэтому я использую значения ARGB.

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView parent, View view, int position, long id) { 
     //Save the color name into a variable 
     String colorName=((TextView) view).getText().toString(); 

     //Default is color White 
     int color=Color.argb(255, 255, 255, 255); 

     //Check the color name 
     if(colorName.equals("black")) 
     { 
      color=Color.argb(255, 0, 0, 0); 
     } 
     else if (colorName.equals("red")) 
     { 
      color=Color.argb(255, 255, 0, 0); 
     } 
     //...and so on with other colors 

     //Find the background view using the layout id. Then you will be able to change the background with the color 
     findViewById(R.id.id_of_the_layout).setBackgroundColor(color); 

    } 
}); 
+0

У меня на самом деле есть два массива, один с именами цветов и прочее с их шестнадцатеричным значением. Как их собрать вместе? – Yochert

+0

Если они сохранены в том же порядке (например, Array1 = [Black, Red ...] и Array2 = ["# 000000", "# FF0000" ...], то вам нужно сделать это: color = Color .parseColor (Array2 [position]), поэтому, используя этот способ, вам даже не понадобится if-else – programmer23

0

У вашей деятельности есть макет.

Дайте ему имя (здесь один названный внешний контейнер.)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/outer_container" 
      android:focusable="true" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

Делают findViewById на него, а затем установить цвет точки зрения.

 View view = findViewById(R.id.outer_container); 
    view.setBackground or view.setBackgroundColor 
+0

проблема для меня, чтобы получить значение из ListView, а затем установить цвет фона, равный этому значению – Yochert

0

ListViews имеет адаптер, настроенный один или стандартный как ArrayAdapter. Что-то вроде:

ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); 

Вы также можете создать собственный адаптер для хранения сложных объектов, простирающихся BaseAdapter. В вашем случае это может быть достаточно для String. Вы можете хранить шестнадцатеричные коды для каждого другого элемента в списке.

Для получения предметов из адаптера используйте способ getItem(int position).

String colorCode = itemsAdapter.getItem(position); 

Таким образом, в вашем itemClickListener:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView parent, View view, int position, long id) { 
     String colorCode = itemsAdapter.getItem(position); 
     setBackgroundColor(colorCode); 
    } 
}); 

Ваш набор метод BackgroundColor будет использовать ссылку на родительский контейнер, который необходимо хранить при запуске.

View parentContainer; 

... 
// at onCreate 
parentContainer = findViewById(R.id.container_id); 
... 

void setBackgroundColor(String colorCode) { 
    int color = Color.parseColor(colorCode); 
    parentContainer.setBackgroundColor(color); 
} 
Смежные вопросы