Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
1

Можно ли изменять параметры разметки программно?

04.11.2012, 19:26. Просмотров 2439. Ответов 13
Метки нет (Все метки)

Может не корректно озаглавил тему, но нужно вот что: у виджета есть разметка в которой написано android:background=@drawable/bg
можно ли как то в программном коде изменить bg на, например, bg1? Или есть какой другой способ. Т.е. задача стоит в том, что бы задний фон у виджета был разным в зависимости от настроек.
Спасибо за идеи и подсказки!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 19:26
Ответы с готовыми решениями:

Можно ли программно изменять код класса?
Если классы можно подгружать, то можно ли их писать из кода. Если нельзя то в...

Обработка нажатий кнопок созданных программно в заданном месте разметки
Здравствуйте, собственно проблема: как сделать кнопки в андроид(не простые...

Как добавить дополнительные параметры к программно создаваемым кнопкам?
Программа готова к эксплуатации, но появилась необходимость добавить...

Можно ли редактировать текст программно?
Привет Всем!...Подскажите, можно ли редактировать текст программно?...т.е....

Можно ли сделать программно root на Android?
можно ли сделать программно root на android?? И как если можно??

13
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.11.2012, 19:33 2
.setBackgroundResource(R.drawable.bg1);
1
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
04.11.2012, 22:17  [ТС] 3
Цитата Сообщение от V0v1k Посмотреть сообщение
.setBackgroundResource(R.drawable.bg1);
Спасибо. А есть ли возможность указать на ресурс, сформировать его имя из строки как например в VBA Me.Controls('Button1')?

Добавлено через 15 минут
Цитата Сообщение от V0v1k Посмотреть сообщение
.setBackgroundResource(R.drawable.bg1);
Что то я никак не пойму, что перед точкой должно стоять? Наверное сам layout которому надо прилепить новый background, но как к нему получить доступ....

Добавлено через 50 минут
Нахожусь в активити настроек. Пытаюсь изменить фон разметки в другом активити - виджета.
пишу так:
Java
1
2
LinearLayout wl = (LinearLayout)findViewById(R.id.widget_layout);
wl.setBackgroundResource(R.drawable.bg);
возникает ошибка...
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
04.11.2012, 23:57 4
Цитата Сообщение от dubok79 Посмотреть сообщение
А есть ли возможность указать на ресурс, сформировать его имя из строки
можно. а зачем?

Цитата Сообщение от dubok79 Посмотреть сообщение
Что то я никак не пойму, что перед точкой должно стоять? Наверное сам layout которому надо прилепить новый background,
ну да.


Цитата Сообщение от dubok79 Посмотреть сообщение
возникает ошибка...
потому, что в активити настроек нет лаяута с id widget_layout
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
05.11.2012, 00:36  [ТС] 5
Цитата Сообщение от V0v1k Посмотреть сообщение
потому, что в активити настроек нет лаяута с id widget_layout
Ну мне надо бы менять задний фон у ляута виджета. Как тут быть?
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.11.2012, 00:44 6
в окне натроек записать в SharedPreferences фон, в виджете считать с SharedPreferences и применить.
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
05.11.2012, 01:20  [ТС] 7
Цитата Сообщение от V0v1k Посмотреть сообщение
в окне натроек записать в SharedPreferences фон, в виджете считать с SharedPreferences и применить.
А как я запишу в шаред фон? он у меня *.png
Что то я не допонимаю, извините
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.11.2012, 01:35 8
Цитата Сообщение от dubok79 Посмотреть сообщение
он у меня *.png
переменная R.drawable.bg1 типа int
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
05.11.2012, 01:37  [ТС] 9
Цитата Сообщение от V0v1k Посмотреть сообщение
переменная R.drawable.bg1 типа int
Это все так. Но когда я в виджете пытаюсь достучаться до layout через findViewById эклипс пишет ошибку, что AppWidgetProvider не знает такой метод
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
05.11.2012, 02:57 10
сам виджеты никогда не делал, но вот что мне удалось нагуглить:
remoteView.setInt(R.id.widget_layout, "setBackgroundResource", R.drawable.bg1);
0
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
05.11.2012, 21:35  [ТС] 11
Цитата Сообщение от V0v1k Посмотреть сообщение
сам виджеты никогда не делал, но вот что мне удалось нагуглить:
remoteView.setInt(R.id.widget_layout, "setBackgroundResource", R.drawable.bg1);
Все равно не получается... ошибок никаких не выдает, но фон у виджета не поменялся...жалька

Добавлено через 4 часа 32 минуты
А есть ли возможность указать на ресурс, сформировать его имя из строки
Цитата Сообщение от V0v1k Посмотреть сообщение
можно. а зачем?
Ну например для автоматического учета новых тем для виджета. Т.е. добавить в ресурс картинку, прописать ее в strings.xml, а на onUpdate виджета все это дело само бы считывалось.
Подскажите как указать на ресурс, сформировав его имя из строки? Спасибо
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.11.2012, 00:33 12
как это поможет учитывать новые темы?
Java
1
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
1
dubok79
324 / 122 / 10
Регистрация: 01.11.2012
Сообщений: 586
06.11.2012, 11:46  [ТС] 13
Цитата Сообщение от V0v1k Посмотреть сообщение
как это поможет учитывать новые темы?
Java
1
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());
Я же говорю, есть в strings.xml string-array с наименованиями тем. Эти наименования соответствуют имени файла заднего фона в drawable. Таким образом что-бы в коде ничего не править, достаточно добавить новую тему в массив и положить ее в drawable. Вот.

Еще вопрос. Каким образом можно определить существует ресурс или нет. Попробовал getResources().equals("bg"), но наверное это совсем не то, там тип Object стоит, всегда фальш возвращается. Подскажите если знаете. Спасибо.

P.S. кстати почему эклипс пишет про getIdentifier "Примечание: использование этой функции не рекомендуется. Это гораздо более эффективно, чтобы получить ресурсы на идентификатор, чем по имени." машинный перевод
0
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
06.11.2012, 12:36 14
Цитата Сообщение от dubok79 Посмотреть сообщение
Каким образом можно определить существует ресурс или нет.
getIdentifier Returns 0 if no such resource was found. (0 is not a valid resource ID.)

Цитата Сообщение от dubok79 Посмотреть сообщение
почему эклипс пишет
наверное потому что так оно и есть.
лучше бы инглиш скопировали чем это)
1
06.11.2012, 12:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2012, 12:36

Как можно изменить язык Activity программно?
Создал я 2 ресурса String, все работает если только в настройках самого...

Можно ли программно узнать заблокирован ли экран у смартфона\планшета и разблокировать его
Здравствуйте, можно ли программно узнать заблокирован ли экран у...

Программно изменять параметры в 'Edit Connection' SimpleDataSet
Мучаюсь вопросом. Как изменять программно свойства компонента SimpleDataSet. А...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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