Mar
18

Пишем свои компоненты для Mono for Android (Xamarin.Android) – Multi-Select Spinner

Для одного из текущих проектов понадобилось сделать контрол для множественного выбора элементов из списка.
Делать это отдельной Activity как-то не хотелось, но в Android нет готового компонента для этого. Максимум, что можно сделать, это использовать AlertDialog с множественным выбором. Обычный же Spinner позволяет выбрать только один элемент.
И вот, после гугления было найдено неплохое решение на StackOverflow, которое позволяет совместить внешний вид Spinner’а и функционал AlertDialog’а. Решение для Java можно посмотреть здесь. Это решение мне не очень понравилось из-за того, что работает только со строками + необходимо использовать дополнительный метод для установки элементов списка для выбора, вместо того, чтобы нормально испольщовать Adapter для этого.

После небольших допиливаний получился контрол, который, все-таки, можно использовать с адаптером. Правда, при этом теряется возможность хранить ссылку на объект адаптера где-то снаружи контрола и делать ему NotifyDataSetChanged() и NotifyDataSetInvalidated(), но для спиннера это очень редко используемый функционал, так что можно назвать решение приемлемым.
читать далее…

Mar
12

ActionBarSherlock – Удобная реализация UI-паттерна ActionBar для Android-приложений – Часть I

Что-то пауза с постами у нас получается совсем нечеловеческая. Попробуем еще разок возобновить публикации.
И сегодня мы познакомимся с библиотекой, реализующей UI-паттерн Action Bar для Android-приложений.

Разработчики библиотеки позиционируют ее как расширение к Compatibility Library, которое для создания ActionBar использует нативную реализацию, если это поддерживается системой, или же вручную дублирует нужный функционал.

Библиотека является open-source проектом и доступна для загрузки на GitHub.
читать далее…

Jan
26

Исходные коды JavaScript-фреймворка Enyo (из WebOS) выложены в open-source!

HP выложила в свободный доступ исходные коды JS-фреймворка Enyo (из WebOS 2.x) под лицензией Apache 2.0. Этот кросс-платформенный фреймворк весит всего 13 кб и может быть использован для разработки приложений не только для WebOS, но и для Android.

Помимо исходного кода разработчикам доступен Playground, где можно написать любой код на Enyo и посмотреть как он работает.

Jan
13

Google запустил сайт по дизайну Android-приложений

Сегодня в Google Developers Blog появился анонс о новом разделе сайта для разработчиков, в котором будут освещаться вопросы, связанные с дизайном приложений для платформы Android.

На сайте можно найти документацию о проектировании интерфейса Android-приложений, работающих на устройствах с различными размерами и различными разрешениями экранов, описание типовых шаблонов проектирования интерфейса приложений (таких как Action Bar, Swipe Views и т.д.), узнать больше о стандартных компонентах Android и новой теме оформления в Ice Cream Sandwich.

Oct
01

Работа с SOAP Web-сервисами в Android-приложениях

Всем время от времени хочется странного. Вот мне тоже захотелось такого. А именно – подружить Android-приложение с .NET Web-сервисом – такие сервисы и писать быстрее и доступ к ним потом можно получить из Windows Mobile и Windows Phone 7 без проблем – тоесть одним махом можно решить проблему работы с сервисом для различных мобильных платформ. И вот в этот раз я расскажу о том, как сделать чтобы все это заработало. читать далее…

Sep
05

Работа с акселерометром в Android

Для одного из текущих проектов понадобилась поддержка акселерометра. Учитывая то, что еще месяц назад Android API я в глаза не видел, мне казалось что получение данных с акселерометра – это какой-то адский труд. Оказалось все намного проще.

Для работы с различными датчиками в Android используется класс Sensor. Список датчиков можно получить через SensorManager. Например таким вот образом при создании Activity можно получить объект Sensor, связанный с акселеромтером:

public class AccelerometerTest extends Activity {

	SensorManager mSensorManager;
	Sensor mAccelerometerSensor;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
        if(sensors.size() > 0)
        {
        	for (Sensor sensor : sensors) {
        		switch(sensor.getType())
        		{
        		case Sensor.TYPE_ACCELEROMETER:
        			if(mAccelerometerSensor == null) mAccelerometerSensor = sensor;
        			break;
        		default:
        			break;
        		}
		}
        }
    }

читать далее…

Jul
16

Мой путь в Motorola SHOP4APPS или “Где здесь деньги?”

Таки-да, позавчера произошло Событие – мое Android-приложение PDFMyWeb Pro наконец-то пропустили в Motorola’овский SHOP4APPS. И это после 7ми месяцев мучений, более десятка попыток его туда запостить, кучи потраченного времени и нервов. Но, в общем, это случилось и сейчас я попробую провести небольшой анализ того, стоилоа ли игра свеч.

Начало

А началось все давно (черт возьми, почти все посты о попадании на различные площадки по продаже мобильных приложений у меня начинаются именно с этой фразы. Супер-просто ни разу не было, на сколько я помню). В декабре прошлого года вышла первая версия моей утилиты SMSMyFile для обмена файлами через SMS и после успешного попадания в Android Market решено было покорять новые горизонты. Одним из таких “новых” стал мотороловский маркет Shop4Apps. информации о нем было очень немного (в основном потому что у моторолы какая-то странная политика по поводу новинок – они доступны только по предварительной регистрации, акцептования кучи NDA и найти информацию о чем-то на их сайте не так уж и просто), но я нашел как все-таки зарегистрироваться в их программе для разработчиков. Регистрация там, скажу я вам, не такая уж и простая. Мало того что выспрашивают кучу личной информации, чуть ли не группу крови и кличку любимой собачки брата жены, так им еще и обязательно нужен валидный PayPal-аккаунт, без наличия которого о сабмите платных приложений (да и вобще каких-либо приложений, как я понял) не может быть и речи. К чему бы это? Я бы может бесплатный софт без PayPal’а постил, а ведь нет, нельзя.

Но ладно, PayPal – штука наживная (как обзавестись американским PayPal-аккаунтом я уже писал ранее), поэтому регистрация прошла более-менее гладко (но долго, помнится ответа о том, что мою информацию рассмотрели и пустили в Developer Program, я ждал около полутора недель, еще тогда меня это жутко бесило, и, как потом оказалось, не спроста). читать далее…

Sep
30

Доступна запись вебкаста – Palm webOS Application Basics

Доступна запись вебкаста “Palm WebOS: Application Basics“, который проходил 9 сентября 2009г. Скачать можно здесь.

Описание

This session begins with an overview of the basic webOS application structure and a demo of the core SDK developer tools, and includes detail presentations on the application launch lifecycle, and Mojo controllers and methods. We’ll create the initial version of News application with a single story view which will use many of the elements described in this segment including appinfo.json, sources.json, basic scene styles, stage and scene controllers, pushScene and swapScene methods among others.

May
21

Обучающие материалы по Windows Mobile (Windows Mobile RampUp Track) доступны на MSDN

На MSDN доступен курс по разработке для Windows Mobile. Материал состоит из 7ми модулей, каждый из которых содержит лекции и медиа-материалы по разработке мобильных приложений. После прохождения курса можно получить что-то вроде серитификата. У них это называется “Graduation Award”.

May
07

Скажите “нет” GAPI – Все что вам нужно знать об AllKeys и обработке нажатия клавиш в Windows Mobile

Games API (GAPI) это технология, которая позволяла приложениям для Windows Mobile 2003 быстро отрисовывать графику на экране. В ней также были функции, которые позволяли получать сообщения о нажатии клавиш, даже для тех, которые обрабатываются операционной системой Windows Mobile самостоятельно.

Графическая составляющая GAPI была заменена на DirectShow (которая позволяла использовать аппаратное ускорение) в Windows Mobile 5.0. В тоже время поддерживалась совместимость с GAPI для того чтобы старые приложения продолжали работать.

Большая часть материалов по GAPI была упразднена в документации к Windows Mobile 6.1, в то же время функции для обработки ввода были оставлены и приложения могли запрашивать обработку нажатия всех клавиш. Совместимость приложений поддерживалась и для этой версии

Все это меняется в новой версии Windows Mobile, в Windows Mobile 6.5. В то же время некоторые устройства все еще могут поддерживать GAPI, но поддержка и тестирование GAPI более не является необходимостью для производителей устройств и для мобильных операторов. Это значит что если приложение требует GAPI, оно может вызвать непредсказуемое поведение на устройствах с Windows Mobile 6.5.

Другим важным изменением является тот факт что для приема в Windows Marketplace for Mobile и для сертификации Designed for Windows Mobile необходимо чтобы приложение не зависело от GAPI.

Для замены функционала, предоставляемого GAPI, новая функция для работы с клавиатурой была введена в публичное API. Это функция AllKeys(). В этой ситуации с введением новой функции есть одна классная штука – она была доступна и ранее наряду с GAPI b на самом деле это API функция, оберткой над которой GAPI и являлась. Это значит что миграция на AllKeys() lолжна быть довольно простой и обратную совместимость можно будет поддерживать без проблем.

Миграцию на AllKeys() можно осуществить очень просто – заменой

  • GXOpenInput() на AllKeys(TRUE).
  • GXCloseInput() на AllKeys(FALSE).

Функция AllKeys() поддерживается для Windows Mobile 2003 и выше. Определена в Winuser.h

Пример использования:

// process checkbox

case IDC_ALL_KEYS_CHECK_BOX:

if (g_AllKeys == true)
{
    // Allow the OS to intercept some button presses
     AllKeys(FALSE);
    g_AllKeys = false;
    // set button state
    SendMessage(hwndCtl,BM_SETCHECK, BST_UNCHECKED,0);
}
else
{
    // Do not allow os to intercept button presses
    AllKeys(TRUE);
    g_AllKeys = true;
    //set button state
    SendMessage(hwndCtl,BM_SETCHECK, BST_CHECKED,0);
} 

Всю эту интересность я узнал из поста в Windows Mobile Team Blog. Эта статья является вольным переводом исходной.


top