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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
nilamop
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
#1

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

30.05.2014, 12:58. Просмотров 1394. Ответов 5
Метки нет (Все метки)

Сейчас занимаюсь реализацией метода для трех кнопок(одного общего метода), при нажатии на которые менялся текст и фон.
Когда использовал на каждую кнопку отдельный метод все работало отлично. Когда же один 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
Посмотрите здесь:

Почему .setBackground не работает? - Программирование Android
У меня кнопки представляют собой TextView'ы, на которых по умолчанию выставлены соотв. рисунки, но при попытке изменить их(на любые) при...

Инструментарий Java для считывания PDF файла в программу - Программирование Android
Как прочитать pdf файл в программу?? Какие есть для этого инструменты java?? Можете привести фрагмент кода или пример чтения данных из pdf...

смена ресурсов - Программирование Android
здравствуйте, есть код but.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View...

Хранение ресурсов - Программирование Android
Здравствуйте! Я недавно начала писать приложение под Android. Опыта у меня немного и я столкнулась с проблемой. Допустим, я хочу...

Использование ресурсов классами - Программирование Android
В приложении есть кнопка и TextView. Пользователь жмёт клавишу. После нажатия клавиши я хочу, чтобы создался объект другого класса...

Установка ресурсов от строки - Программирование Android
Есть у меня главное активити: public class MainActivity extends AppCompatActivity { private static ImageView actionBarWifi; ...

Обращение к файлу ресурсов - Программирование Android
Всем доброго времени суток. У меня вопрос как можно, и можно ли, обратиться к файлу ресурса моего приложения (изображение) для его...

Получить массив из ресурсов - Программирование Android
String names = getResources().getStringArray(R.array.names); без этой строчки приложения запускается, с ней нет. еклипс красным не...

Получить картинку из ресурсов - Программирование Android
Вот так приложение получает иконку: android:icon="@drawable/ic_launcher" Вопрос: Как получить картинку так-же, только программно и в...

Использование стандартных ресурсов - Программирование Android
Вообщем мне нужно использовать стиль кнопки на другой компонент, но с небольшими изменениями. Проблема вот в чём: Я взял дефолтный...

Перебор id ресурсов в цикле - Программирование Android
Добрый день, В layout расположены 20 кнопок, каждая из которых, естественно, имеет собственный id. Эти id отличаются только числовым...

Взять массив из ресурсов - Программирование Android
Как такой массив взять из getResources private static final String CONTENT = new String { "Раз", "Два", "Три",...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 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
1565 / 1307 / 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
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
30.05.2014, 13:09  [ТС]     Считывания ресурсов методом setBackground #4
Нет, ругает на то, что R.color.yellowColor - in view cannot be applied to (int)
NiRamz
211 / 211 / 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
0 / 0 / 0
Регистрация: 23.05.2013
Сообщений: 22
30.05.2014, 13:51  [ТС]     Считывания ресурсов методом setBackground #6
Спасибо всем кто откликнулся и помог разобраться. Да, оказывается я просто невнимательный и не видел в своих кодах разницы между setBackground() и setBackgroundResource()

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

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