Урок 117. Виджеты. Создание. Lifecycle
Урок 117. Виджеты. Создание. Lifecycle
В этом уроке:
- создаем простой виджет
- разбираемся в его Lifecycle
Click here to read this article!
- создаем простой виджет
- разбираемся в его Lifecycle
Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:39, всего редактировалось 6 раз.
Re: Урок 117. Виджеты. Создание. Lifecycle
Есть такая замечательная программа ByBalance, так вот там виджет занимает почти все отведенное ячейкой пространство причем это никак не зависит от лончера или версии андроида. Если виджет делать как в вашем уроке, все вроде бы замечательно, но в некоторых лончерах таких прошивок как MIUI или EMUI виджет сжимается до неприличия, а вышеуказанный ведет себя нормально. Пробовал в разных лончерах виджет занимает не всю ячейку. На эмуляторе все нормально работает, т.е. ожидаемо. Может быть вы в курсе как сделать размеры виджета максимальными и не зависеть от лончеров и прочего. Спасибо.
Re: Урок 117. Виджеты. Создание. Lifecycle
Что, никаких идей нету?
Re: Урок 117. Виджеты. Создание. Lifecycle
Походу создатели этих прошивок использовали другой алгоритм рассчета ячеек, чем указано в хелпе. Я когда-то в литературе встречал еще формулу 74 * х - 2. Попробуйте ее использовать. Если тоже не катит, то выясните, плз, опытным путем, какое кол-во dp соответствует одной ячейке в этих прошивках.dubok79 писал(а):Что, никаких идей нету?
Это будет полезная инфа, я добавлю ее в Урок.
Re: Урок 117. Виджеты. Создание. Lifecycle
Я имел ввиду не совсем это. Но не суть важно. Если лайот виджета растянуть match_parent, то лончер будет сам руководить этим виджетом. Если задать размер, то он будет жестким, но опять же не везде, например на EmotionUI или MIUI китайских брендов HUAWEI и Xiaomi. Вообще формула 74*x-2 работает только по высоте, если же использовать ее по ширине, то андроид будет неверно расчитывать занимаемое место. Т.е. если указать в файле provider размер 72dp x 72dp, то это будет размер 2х1, а не ожидаемый 1х1. Опытным путем получилось если ячейку считать 64dp, то на любых SDK расчитывается верно. Ну а дальше размер виджета будет во многом зависеть от лончера, НО указанный мною в первом посте виджет стабилен ВЕЗДЕ. Связывался с разработчиком, он молчит, а жаль...damager82 писал(а):Походу создатели этих прошивок использовали другой алгоритм рассчета ячеек, чем указано в хелпе. Я когда-то в литературе встречал еще формулу 74 * х - 2. Попробуйте ее использовать. Если тоже не катит, то выясните, плз, опытным путем, какое кол-во dp соответствует одной ячейке в этих прошивках.dubok79 писал(а):Что, никаких идей нету?
Это будет полезная инфа, я добавлю ее в Урок.
Re: Урок 117. Виджеты. Создание. Lifecycle
Помоему RalativeLayout не может содержать атрибут android:orientation. так ведь?
Re: Урок 117. Виджеты. Создание. Lifecycle
содержать может только он ничего не будет значить, эклипс возможно даже подчёркнёт атрибут но приложение скомпилитьсяgera писал(а):Помоему RalativeLayout не может содержать атрибут android:orientation. так ведь?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 117. Виджеты. Создание. Lifecycle
А причем тут виджеты?
Re: Урок 117. Виджеты. Создание. Lifecycle
Имеется: Виджет аля часы с анимацией.
Вроде работуют, но есть но. Т.к. анимация включается 4 раза за секунду (или чаще), не хотелось бы каждый раз лезть в SharedPreferences и смотреть какие параметры для анимации установлены там для конскретного id выджета. Согласитесь, каждый раз из-за такой ерунды запускать инициализацию SharedPreferences, а это и чтение с диска (лишний раз) и парсинг. Решил в свой виджет добавить некий Хэш, в котором для id возвращаются нужные данные. Т.е. если ничего перезаписывать не нужно, то можно прочитать быстро какие были последние настройки. Эти настройки изменяются после каждого измениея вместе с записью вSharedPreferences. Я хочу сказать, что записывать значения - это редко, но часто только читать.
Но тут меня ждало разочарования. Дело в том, что для каждого вызова (буть то анимация или обнавления) виждет как объект создается занова и соотвественно хэш пропадает. Можно ли как-нибудь (флагами какиминибудь) сделать так, чтобы виждет (сам BroadcastReseiver) висел в памяти, а не воссоздавался?
Может есть другие подходы к анимированию виждета?
*******
Вопрос решён, элементарно, надо было юзать static.
Вроде работуют, но есть но. Т.к. анимация включается 4 раза за секунду (или чаще), не хотелось бы каждый раз лезть в SharedPreferences и смотреть какие параметры для анимации установлены там для конскретного id выджета. Согласитесь, каждый раз из-за такой ерунды запускать инициализацию SharedPreferences, а это и чтение с диска (лишний раз) и парсинг. Решил в свой виджет добавить некий Хэш, в котором для id возвращаются нужные данные. Т.е. если ничего перезаписывать не нужно, то можно прочитать быстро какие были последние настройки. Эти настройки изменяются после каждого измениея вместе с записью вSharedPreferences. Я хочу сказать, что записывать значения - это редко, но часто только читать.
Но тут меня ждало разочарования. Дело в том, что для каждого вызова (буть то анимация или обнавления) виждет как объект создается занова и соотвественно хэш пропадает. Можно ли как-нибудь (флагами какиминибудь) сделать так, чтобы виждет (сам BroadcastReseiver) висел в памяти, а не воссоздавался?
Может есть другие подходы к анимированию виждета?
*******
Вопрос решён, элементарно, надо было юзать static.
- shubniggurath
- Сообщения: 7
- Зарегистрирован: 09 авг 2013, 11:52
- Контактная информация:
Re: Урок 117. Виджеты. Создание. Lifecycle
Здравствуйте. Спасибо большое за ваши уроки- пока что полезнее чем они ничего не встретил.
В своем уроке №117 вы написали следующее:
" Они позволяют просмотреть какую-либо информацию из основных приложений, либо повлиять на поведение этих приложений."
А где можно более подробно узнать именно про то, как влиять на поведение приложений? Например когда ставится и приложение и виджет для него, какой механизм взаимодействия?
В своем уроке №117 вы написали следующее:
" Они позволяют просмотреть какую-либо информацию из основных приложений, либо повлиять на поведение этих приложений."
А где можно более подробно узнать именно про то, как влиять на поведение приложений? Например когда ставится и приложение и виджет для него, какой механизм взаимодействия?
http://playnoread.ru - леплю, творю, малюю
Re: Урок 117. Виджеты. Создание. Lifecycle
Хороший вопрос! Тоже заинтересовалоshubniggurath писал(а):Здравствуйте. Спасибо большое за ваши уроки- пока что полезнее чем они ничего не встретил.
В своем уроке №117 вы написали следующее:
" Они позволяют просмотреть какую-либо информацию из основных приложений, либо повлиять на поведение этих приложений."
А где можно более подробно узнать именно про то, как влиять на поведение приложений? Например когда ставится и приложение и виджет для него, какой механизм взаимодействия?
Re: Урок 117. Виджеты. Создание. Lifecycle
у меня эмулятор валится с ошибкой "Sorry! The aplication xxxx (process yyyyy) has stopped unexpectedly. Please try again."
В логах грязно ругается на то, что якобы класс найти не может:
09-04 21:01:19.896: E/AndroidRuntime(319): Caused by: java.lang.ClassNotFoundException: com.example.widget.Widget in loader dalvik.system.PathClassLoader[/data/app/com.example.widget-2.apk]
В манифесте всё прописано верно - для ресивера класс указан. этот класс наследует AppWidgetProvider. Название класса соответствует названию класса, указанному в манифесте.
Подскажите пожалуйста что я упустил?
В логах грязно ругается на то, что якобы класс найти не может:
09-04 21:01:19.896: E/AndroidRuntime(319): Caused by: java.lang.ClassNotFoundException: com.example.widget.Widget in loader dalvik.system.PathClassLoader[/data/app/com.example.widget-2.apk]
В манифесте всё прописано верно - для ресивера класс указан. этот класс наследует AppWidgetProvider. Название класса соответствует названию класса, указанному в манифесте.
Подскажите пожалуйста что я упустил?
Re: Урок 117. Виджеты. Создание. Lifecycle
michail89,
ты просто забыл свой файл класса Widget положить в package="com.example.simplewidget"
ты просто забыл свой файл класса Widget положить в package="com.example.simplewidget"
Re: Урок 117. Виджеты. Создание. Lifecycle
damager82, вы бы сделали тему со списком уроков по порядку и прикрепили для упрощения навигации, а то очень не удобно уже становится восстанавливать последовательность
Re: Урок 117. Виджеты. Создание. Lifecycle
вообще-то на сайте стартандроид есть список всех уроков, оттуда, из каждого, в конце есть ссылка на переход в соответствующую тему-обсуждение.Isaev писал(а):damager82, вы бы сделали тему со списком уроков по порядку и прикрепили для упрощения навигации, а то очень не удобно уже становится восстанавливать последовательность
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 117. Виджеты. Создание. Lifecycle
а, с сайта! я про сайт то и не знал, пользуюсь только форумом) спасибо
Re: Урок 117. Виджеты. Создание. Lifecycle
а зря, там много интересного еще есть
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 117. Виджеты. Создание. Lifecycle
Форум становится популярнее сайта, есть повод для гордости
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 117. Виджеты. Создание. Lifecycle
иногда кажется, что это наоборот, не очень хорошо. Народ уже спрашивает зачастую не только то, что можно быстро нагуглить, но и то, что разобрано по косточкам на тутошних уроках.. Все куда-то торопятся)anber писал(а):Форум становится популярнее сайта, есть повод для гордости
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 117. Виджеты. Создание. Lifecycle
Хорошо хоть пока еще немного вузов где преподают программирование на андроиде, ато ближе к сессии форум лег быFoenix писал(а):иногда кажется, что это наоборот, не очень хорошо. Народ уже спрашивает зачастую не только то, что можно быстро нагуглить, но и то, что разобрано по косточкам на тутошних уроках.. Все куда-то торопятся)anber писал(а):Форум становится популярнее сайта, есть повод для гордости
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.