Буквально вчера моя программа Таблица Менделеева заняла первое место в разделе Образование в российском Google Play. Для меня лично это большое достижение, потому что последний раз я попадал во Featured в 2008 году. Кстати, также моя программа Moscow Ticket Info привлекла внимание российского Google и они добавили ее в подборку В пути.
вторник, 15 октября 2013 г.
среда, 9 октября 2013 г.
Новый домен для книги
Я все-таки решил постепенно писать книгу и постараюсь уделять этому время, хотя бы один раз в неделю. Ссылка на блог книги http://bit.ly/19wFJJh. Формат ведения блога следующий, я буду писать некоторые заметки в блог и потом формировать из них главы книги. Книга позиционируется, как сборник рецептов, а не полностью книга для новичков. Причем рецепты будут, как для новичков, так и для более продвинутых программистов.
понедельник, 27 мая 2013 г.
Google I/O 2013 и поездка в Америку
Недавно мне удалось исполнить свою мечту, побывать в Америке и заодно на Google I/O 2013.
Фотографии (пока без макро) выложил в Google Photos. Отдельной ссылкой позже дам ссылку на видео и макросъемку.
Я уже давно начал писать статью по использованию ActionBar, но все никак нет времени ее закончить, надеюсь вы скоро ее увидите :) Она будет опубликована тут и в блоге http://androidbook.wordpress.com/.
Фотографии (пока без макро) выложил в Google Photos. Отдельной ссылкой позже дам ссылку на видео и макросъемку.
Я уже давно начал писать статью по использованию ActionBar, но все никак нет времени ее закончить, надеюсь вы скоро ее увидите :) Она будет опубликована тут и в блоге http://androidbook.wordpress.com/.
пятница, 19 апреля 2013 г.
Реинкарнация
Давно я тут не писал :) Меня вообще кто-то читает? Я решил возобновить ведение этого блога по причине привязки его к Google+.
четверг, 27 января 2011 г.
Финальная статья по Toast
Пока моя книга пишется не очень быстро, но недавно немного переделал статью по Toast и добавил исходные коды. Тут свежая версия. И кстати пока решил не делать статьи в PDF это много времени занимает. Так что все будет в онлайне на сайте книги.
четверг, 23 сентября 2010 г.
Баг в Android или проблема Spinner в полноэкранном режиме
Вчера мой знакомый Максим Уханов написал мне в GTalk по поводу одной необычной проблемы. Он разрабатывает некое полноэкранное приложение, которое вызывает диалог c виджетом Spinner. И все было бы классно, но проявился баг - при нажатии на Spinner в полноэкранном режиме при появлении диалога выбора на 1-2 секунды появляется Status Bar. Это ситуация возникает в том случае, если в Spinner располагается большое количество элементов. Выглядит это примерно так:

Я начал исследовать исходные коды Spinner и обнаружил, что при отображении диалога с элементами при нажатии на Spinner создается диалог, который не учитывает вариант полноэкранного отображения. Выглядит код следующим образом.
@Override
public boolean performClick() {
boolean handled = super.performClick();
if (!handled) {
handled = true;
Context context = getContext();
final DropDownAdapter adapter = new DropDownAdapter(getAdapter());
AlertDialog.Builder builder = new AlertDialog.Builder(context);
if (mPrompt != null) {
builder.setTitle(mPrompt);
}
mPopup = builder.setSingleChoiceItems(adapter,
getSelectedItemPosition(), this).show();
}
return handled;
}
В голову пришло только одно решение, это создать свой класс на основе Spinner и перекрыть его метод performClick(). Но сложность заключается в том, что ссылка на диалог Spinner сохраняется в приватной переменной mPopup. Эту проблему мы обошли, используя рефлексию для доступа к этой переменной после создания диалога и вызова необходимого метода для установки свойств диалога для корректного отображения его в полноэкранном режиме. Чтобы повысить безопасность использования такого метода решения нашей проблемы, мы абстрагировались от названия поля mPopup и просто по циклу ищем переменную типа AlertDialog, таким образом даже если разработчики поменяют название переменной, наш код будет работать. Ниже представлен код нового класса:
package maximyudin.spinnerbug;
import java.lang.reflect.Field;
import android.app.AlertDialog;
import android.content.Context;
import android.util.AttributeSet;
import android.view.WindowManager;
import android.widget.Spinner;
public class NoTitleSpinner extends Spinner {
public NoTitleSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public NoTitleSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoTitleSpinner(Context context) {
super(context);
}
@Override
public boolean performClick() {
boolean status = super.performClick();
Field privateStringField = null;
try {
Field[] fields = Spinner.class.getDeclaredFields();
for (Field field : fields) {
if (field.getType().getName().equals(AlertDialog.class.getName())) {
privateStringField = field;
break;
}
}
if (privateStringField == null) {
return false;
}
privateStringField.setAccessible(true);
AlertDialog dialog = (AlertDialog) privateStringField.get(this);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
}
return status;
}
}
Теперь вам вместо Spinner надо в коде и в xml использовать наш NoTitleSpinner.
Полностью код проекта выложен тут.
P.S. Мы добавили этот баг в баг-репорт - следите за новостями тут - http://code.google.com/p/android/issues/detail?id=11419
вторник, 3 августа 2010 г.
Обзор Gigabyte GSmart G1305 (Codfish)
Некоторое время назад ко мне на тестирования попал тестовый образец первого смартфона от Gigabyte - GSmart G1305. По внешнему виду он меня изначально сильно испугал. Выглядел, как некачественная китайская подделка. Но после пристального рассмотрения аппарат показался мне довольно интересным.
Сразу, что бросилось в глаза - это сильно пачкающийся экран, на первой фотографии это хорошо заметно. Для начала приведу небольшую характеристику девайса. Аппарат базируется на ОС Android 1.6 (говорят будет апдейт до 2.1). Процессор у устройства довольной неплохой для такой ценовой категории - 600 МГц (Qualcomm MSM7227). Постоянная и оперативная память по 256 Мб, есть поддержка Bluetooth 2.0, Wi-Fi (802.11b/g), GPS. Девайс оснащен сенсорным экраном в 3,2 дюйма и 5 Мп камерой (с автофокусом и фотовспышкой). Также, что не маловажно, есть трекбол. Многие считают этот элемент управления бесполезным, но он очень удобен при навигации в ландшафтном режиме.
Подписаться на:
Сообщения (Atom)