Форум программистов, компьютерный форум, киберфорум
Наши страницы

Basic для платформы Android - Basic4Android - Basic4Android

Войти
Регистрация
Восстановить пароль

Показать сообщение отдельно
Pro_grammer
Модератор
6078 / 2157 / 406
Регистрация: 24.04.2011
Сообщений: 3,724
Записей в блоге: 10
22.05.2014, 20:21  [ТС]
Android виджеты
Виджеты для андроид — это маленькие приложения, которые могут быть размещены на рабочем столе вашего Android-устрйства. Виджет работает в рамках "рабочего стола" нашего устройства и от этого имеет как плюсы так и минусы. Плюсы: можно настроить обновление средствами системы. Но минимальный интервал обновления при этом 30 мин., в целях экономии аккумулятора. Виджет всегда на виду: клиенту можно что-то сообщать не дожидаясь его действий.
Минусы: ограниченный набор компонентов, доступных для использования в интерфейсе.
Поддерживаются следующие виды:
- Button (default drawable)
- Label (ColorDrawable or GradientDrawable)
- Panel (ColorDrawable or GradientDrawable)
- ImageView
- ProgressBar (both modes)
Из этого следует, что на Panel или там Button вы не сможете фоном поставить изображение.
Ну, и, само собой, ограниченный размер "рабочей площади". В зависимости от устройства и его размеров будет зависеть и максимальный размер виджета. И он намного меньше полного экрана. Обычно виджеты размещаются в клетках, размер одной 80х100. Клеток может быть различное сочетание, такие как 2х3 или 3х4, горизонтальное расположение или вертикальное.
Написать виджет на Basic4Android так же просто, как и обычное приложение. Я придумал проект, в котором мы будем писать виджет, отображающий времена года. Для его осуществления нам понадобятся 4 изображения, соответствующие временам года, одно изображение на заставку в основной программе и иконка.
Название: ico.png
Просмотров: 315

Размер: 8.5 Кб
Основная программа делать ни чего не будет. При запуске покажет заставку с названием и картинкой потом сообщение вида MSGBOX, В котором мы предложим
Basic для платформы Android - Basic4Android
пользователю установить виджет на рабочий экран. После нажатия на OK основное приложение закроется. Во вкладке ВИДЖЕТЫ мы видим наш виджет, который устанавливаем стандартным способом
Basic для платформы Android - Basic4Android
В результате получим рабочий виджет на рабочем экране.
Basic для платформы Android - Basic4Android
Приступаем к написанию основной программы. Запускаем Basic4Android, видим стандартный код. Как обычно, сохраняем проект в отдельной папке, на это раз с именем seasons. Изменяем в меню Project->Pasckage Name на своё, помним, что это как минимум 2 слова, разделённые точкой, к примеру seasons.examples. Теперь в меню Project->Choose Icon выбираем свою иконку. С настройками закончили, приступаем к творчеству. Открываем дизайнер и добавляем все найденные изображения в кол-ве 5 штук. Способом, описанным в предыдущих уроках. На экран добавляем Panel, растягиваем на весь экран. В данный момент мы проектируем приложение, и тут нет ограничений, а по сему прямо на панель в качестве фона устанавливаем изображение заставки. В свойствах панели Drawable устанавливаем в BitmapDrawable и в качестве Image File выбираем этот, найденный на просторах Интернета рисунок, размером 320х480 ( весь экран)
Basic для платформы Android - Basic4Android
Изменяем имя Activity на наше seasons. Сохраняем панель с именем Layout1 и на этом проектирование основной программы считаем законченным. Приступаем к коду. Как я и сказал, делать наше приложение ни чего не будет, и код будет простой.
Изменяем имя приложения
#ApplicationLabel: Seasons

Код при активации
Visual Basic
1
2
3
4
5
6
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("Layout1")
    Msgbox("Добавте на экран Seasons виджет.", "Seasons")
    Activity.Finish
End Sub
Basic для платформы Android - Basic4Android
С основным приложением закончили. Приступаем к программированию самого виджета. Добавляем из меню проекта Service module. Обращаю внимание, что это типовой модуль, в котором уже написан костяк кода. Даем ему имя, у меня SeasonsModule. Тут в модуле и будет весь остальной код виджета. Вызывам дизайнер и проектируем внешний вид нашего модуля. Если открылся проект приложения Layout1, то выберите File->New, это будет совсем другой файл!
Basic для платформы Android - Basic4Android
Добавляем панель, как основа. Её делаем прозрачной – Alpha = 0. На панель добавляем ImageView1 и Label1. ImageView1 будет содержать изображения времён года, а Label1 будет отображать текущую дату. Смотрите на рисунке настройки шрифта и цвета. Вы, естественно, можете всё сделать по своему. Сохраните этот файл с именем L1.
Можно приступать к программированию виджета. Обновления виджета строятся и посылаются с помощью RemoteViews, включающий контент, для отображения на домашней странице. Объявление в Process_Globals
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim now, dt, month As String
    Dim rv As RemoteViews
    Dim imageFiles() As String
    imageFiles = Array As String("leto.png", "osen.png", _
        "vesna.png", "zima.png")
    Dim currentImage As Int
End Sub
Переменные now, dt, month для работы с датой.
Массив imageFiles = Array As String для смены изображений, содержит имена файлов изображений.
Стандартная процедура для виджета, которая всё настраивает:

Visual Basic
1
2
3
Sub Service_Create
rv = ConfigureHomeWidget("L1", "rv", 60, "Seasons Widget")
End Sub
Первый параметр это слой виджета, который мы создали в дизайнере. Второй это событие rv RemoteViews, третий параметр это время обновления и четвертый это имя нашего виджета. Это имя будет отображатся в списке виджетов для установки.
Следующие типовые процедуры, имена которых говорят сами за себя
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Service_Start (StartingIntent As Intent)
If rv.HandleWidgetEvents(StartingIntent) Then Return
End Sub
Sub rv_RequestUpdate
    GetSeasons
    rv.UpdateWidget
End Sub
 
Sub rv_Disabled
    StopService("")
End Sub
Процедуры старта, обновления и завершения работы виджета.
Основная процедура определения времени года
Visual Basic
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub GetSeasons
    DateTime.DateFormat = "dd:MM:yyyy"
    now = DateTime.now
    dt = DateTime.Date(now) 'день, месяц, год
    rv.SetText("Label1", dt)
    ' Выбор имени месяца и картинки
    Select Case DateTime.GetMonth(DateTime.now)
        Case 1
        month = "Января, зима в разгаре " 
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(3)))
        Case 2
        month = "Февраля, ещё зима "
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(3)))
        Case 3
        month = "Марта, уже весна"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(2)))
        Case 4
        month = "Апреля, весна в разгаре"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(2)))
        Case 5
        month = "Мая, пока ешё весна"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(2)))
        Case 6
        month = "Июня, уже лето"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(0)))
        Case 7
        month = "Июля, середина лета"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(0)))
        Case 8
        month = "Августа, пока ещё лето"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(0)))
        Case 9
        month = "Сентября, уже оснь"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(1)))
        Case 10
        month = "Октября, осень в разгаре"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(1)))
        Case 11
        month = "Ноября, всё ещё осень"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(1)))
        Case 12
        month = "Декабря, уже зима"
        rv.SetImage("ImageView1", LoadBitmap(File.DirAssets, imageFiles(3)))
    End Select
    
    rv.UpdateWidget
    
    
End Sub
В объяснениях не нуждается, обычный код.
Процедура, обрабатывающая взаимодействие с пользователем, а именно реагирует на клик по изображению. В результате выводит название месяца и день в сообщении:
Visual Basic
1
2
3
4
5
6
Sub ImageView1_Click
    
    ToastMessageShow("Сейчас " & DateTime.GetDayOfMonth(DateTime.now) & " " & month , True)
    GetSeasons
    rv.UpdateWidget
End Sub
Вот и весь код. Можно запускать на выполнение, и убедится в простоте программирования на Basic4Android.
Из граблей, которые явно обнаруживаются, можно отметить выбор размера виджета. Если виджет не умещается на экране в положенном ему месте, то его просто не видно в списке виджетов и соответственно не установить. Для этого делают несколько размеров виджетов, если они все максимальные по размеру для группы устройств, или один, но минимальный для самого маленького устройства ( как у нас).
Приятного программирования! Все материалы прилагаются ( из них можно почерпнуть изображения ) + готовый apk.
1
Вложения
Тип файла: zip seasons.zip (966.6 Кб, 73 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru