Форум программистов, компьютерный форум CyberForum.ru

Считывания ресурсов методом setBackground - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
nilamop
 Аватар для nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 21
30.05.2014, 12:58     Считывания ресурсов методом setBackground #1
Сейчас занимаюсь реализацией метода для трех кнопок(одного общего метода), при нажатии на которые менялся текст и фон.
Когда использовал на каждую кнопку отдельный метод все работало отлично. Когда же один onClick() выдает ошибку в
relativeLayout.setBackground(R.color.redColor); мол, in view cannot be applied to (int), как я понял, ресурс в этот метод передаваться может только если он присвоен объекту Drawable.

Вопрос следующий: почему при общем методе для кнопок, setBackground() не принимает ресурс, а при одном методе на кнопку принимается, хотя и подчеркивается красным(да и при использовании объекта с ссылкой на ресурс тоже красным, но хоть работает)?

Тут выложу фрагмент кода работающего, с одним методом для трех кнопок.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
OnClickListener oclBtn = new OnClickListener() {
            @Override
            public void onClick(View v){
                switch (v.getId())
                {
                    case R.id.buttonRed:
                        tvInfo.setText(R.string.red);
                        Resources res0 = getResources();
                        Drawable drawable0 = res0.getDrawable(R.color.redColor);
                        relativeLayout.setBackground(drawable0);
                        break;
                    case R.id.buttonYellow:
                        tvInfo.setText(R.string.yellow);
                        Resources res1 = getResources();
                        Drawable drawable1 = res1.getDrawable(R.color.yellowColor);
                        relativeLayout.setBackground(drawable1);
                        break;
                    case R.id.buttonGreen:
                        tvInfo.setText(R.string.green);
                        Resources res2 = getResources();
                        Drawable drawable2 = res2.getDrawable(R.color.greenColor);
                        relativeLayout.setBackground(drawable2);
                        break;
                }
            }
        };
Тут код с отдельным методом для одной кнопки:
Java
1
2
3
4
5
6
7
buttonYellow.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){
                tvInfo.setText(R.string.yellow);
                relativeLayout.setBackgroundResource(R.color.yellowColor);
            }
        });
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2014, 12:58     Считывания ресурсов методом setBackground
Посмотрите здесь:

Android смена ресурсов
Получить массив из ресурсов Android
Android Хранение ресурсов
Почему .setBackground не работает? Android
Взять массив из ресурсов Android
Android Сравнение строковых ресурсов
Android Загрузка нужных ресурсов
Использование стандартных ресурсов Android
Android Инструментарий Java для считывания PDF файла в программу
Android Перебор id ресурсов в цикле
Получить картинку из ресурсов Android
Android Загрузка ресурсов из модуля

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
30.05.2014, 13:04     Считывания ресурсов методом setBackground #2
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
OnClickListener oclBtn = new OnClickListener() {
            @Override
            public void onClick(View v){
Resources res = getResources();                
int resId = 0;
switch (v.getId())
                {
                    case R.id.buttonRed:
                        tvInfo.setText(R.string.red);      
                        resId = R.color.redColor;
                        break;
                    case R.id.buttonYellow:
                        tvInfo.setText(R.string.yellow);
resId = R.color.yellowColor;
                        break;
                    case R.id.buttonGreen:
                        tvInfo.setText(R.string.green);
resId = R.color.greenColor;
                        break;
                }
 
if(resId != 0) {
relativeLayout.setBackgroundResource(resId);
}
 
            }
        };
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
30.05.2014, 13:06     Считывания ресурсов методом setBackground #3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (v.getId())
                {
                    case R.id.buttonRed:
                        tvInfo.setText(R.string.red);
                        relativeLayout.setBackground(R.color.redColor);
                        break;
                    case R.id.buttonYellow:
                        tvInfo.setText(R.string.yellow);
                        relativeLayout.setBackground(R.color.yellowColor);
                        break;
                    case R.id.buttonGreen:
                        tvInfo.setText(R.string.green);
                        relativeLayout.setBackgroundResource(R.color.greenColor);
                        break;
                }
так работает?
nilamop
 Аватар для nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 21
30.05.2014, 13:09  [ТС]     Считывания ресурсов методом setBackground #4
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
30.05.2014, 13:16     Считывания ресурсов методом setBackground #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от nilamop Посмотреть сообщение
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
потому что в просто setBackground передается Drawable, используйте setBackgroundResource
nilamop
 Аватар для nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 21
30.05.2014, 13:51  [ТС]     Считывания ресурсов методом setBackground #6
Спасибо всем кто откликнулся и помог разобраться. Да, оказывается я просто невнимательный и не видел в своих кодах разницы между setBackground() и setBackgroundResource()

NiRamz, вам особое спасибо за "тыканьем носом" в мою ошибку И за то, что показали как можно красиво использовать в этом случае и setBackground() , но с участием Drawable, который и не выносил за пределы switch. Первый ваш пост тоже протестирован и работает
Yandex
Объявления
30.05.2014, 13:51     Считывания ресурсов методом setBackground
Ответ Создать тему
Опции темы

Текущее время: 15:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru