Основы программирования под Android на примере игры Судоку. Уроки программирования Android Программы по программированию на с планшет

Многие программисты хотят заняться разработкой приложений под Android. Но немногие представляют, какие шаги здесь надо предпринять. Эта подборка призвана помочь новичкам в освоении Android-разработки.

Начало работы

Новичкам в программировании поможет наша .

Для новичков в Android Google сделал хорошее введение в Android на своём сайте. Также есть замечательный краудсорсинговый гид по Android . Кроме того, есть курс от Google на Udacity.

Если у вас возникают проблемы с Android , крайне рекомендуется сперва проверить StackOverflow . Он создан для ответов на технические вопросы и даже является .

Вы всегда можете найти у нас на сайте.

FAQ

Я хочу начать разрабатывать под Android. С чего мне начать?

Первый и важнейший шаг в разработке под Android – это изучение Java и XML. Как только вы более менее познакомитесь и с тем, и с другим, изучите официальную Документацию по Android и пройдите несколько уроков, пока не почувствуете себя достаточно уверенным для создания собственных проектов. Удачи!

Нужно ли мне Android-устройство для разработки?

Вы можете писать приложения без какого-либо Android-устройства, используя включённый в поставку эмулятор (или усовершенствованный Genymotion). Однако для учёта аппаратных требований ничто не заменит тестирование на настоящем устройстве.

Какую IDE мне лучше использовать?

  • Android Studio - официально поддерживаемая IDE для разработки под Android. Именно она используется в современных руководствах и видео, в том числе и от Google.
  • Eclipse была основной IDE для разработки под Android на протяжении многих лет, поэтому большинство устаревших уроков, ресурсов, видео и скриншотов сделаны на ней.
  • IntelliJ IDEA был альтернативой Eclipse, но в настоящее время разумнее начать с Android Studio. Android Studio – это ответвление IntelliJ IDEA, так что вы получите все её преимущества плюс бонусы под Android.

Может, мне стоит забыть про Java и начать учить Kotlin?

Google теперь официально поддерживает Kotlin как язык разработки под Android, но это не значит, что про поддержку Java можно забыть. В ближайшем обозримом будущем документация, инструменты, новые фичи платформы будут поддерживать как Kotlin, так и Java. Хотя Kotlin - более молодой язык с некоторыми приятными особенностями, вы всё ещё можете создавать отличные приложения на Java. Выбор зависит только от вас, но если вам не принципиально или вы новичок, то, возможно, лучше сделать выбор в пользу Kotlin.

Ресурсы

Здесь представлены основные ресурсы по обучению разработке под Android на английском языке. Это далеко не полный список, но достаточный для старта.

Официальные ресурсы Android

Дизайн

  • Красивости для Android – вдохновение для создания графических интерфейсов под Android.

Рассылки

  • Android Weekly – замечательная рассылка, помогающая быть в курсе последних разработок Android.

Коллекции библиотек

Инструменты

  • Genymotion – крайне полезный и функциональный эмулятор.
  • Android Asset Studio – отличная коллекция инструментов для создания/редактирования иконок, изображений и т.д.
  • Codota Plug-in для Android Studio – замечательные примеры кода прямо в Android Studio.

Примеры open source приложений

Идеи для приложений

Итак, у вас есть идея для приложения… Люди каждый день об этом пишут. Но перед тем, как просить помощи в реализации проекта, нужно ответить на следующие ключевые вопросы:

Каков мой бюджет?

Если вы настроены серьёзно и хотите выпустить свой продукт, вы должны подумать о своём бюджете. Даже в случае простого приложения нужно подумать о нескольких тысячах долларов. Хотя бы.

Какая у меня маркетинговая стратегия?

Вы собираетесь использовать обычное сарафанное радио или готовы платить за известность?

Какой список задач у данного проекта?

А также, какие есть ограничения? Сколько мне нужно разработчиков?

Откуда будут приходить/где будут храниться данные?

А также, как они будут использоваться? Разработана ли у меня соответствующая политика приватности?

Есть ли цель заработать денег?

Если да, как вы собрались её достигать? Через рекламу, IAP , подписки, платные приложения? Всё вышеперечисленное?

Как вы будете платить вашим разработчикам?

Есть ли у вас капитал или вы собрались платить им после того, как приложение начнём приносить доход? Часто независимые контрактники требуют часть полной стоимости авансом. Большинству разработчиков неинтересно разделение доходов, за исключением случаев, когда они сами вкладываются в приложение.

Какой будет способ тестирования?

На какой тип устройства вы собираетесь устанавливать его? Как много итераций вам нужно? Каких людей вы хотите вовлечь?

Как скоро вы хотите опубликовать приложение в магазине?

Это однозначно повлияет на конечный доход.

Будете ли вы требовать или предлагать регистрацию/интеграцию с социальными сетями?

Продумайте реализацию этой функциональности.

Какова ваша целевая аудитория?

Это нишевое приложение или оно может быть распространено повсюду?

Реализована ли уже моя идея?

Если да, как я могу улучшить её или что в ней отсутствует?

Что делать с идеями для приложений, если вы не разработчик?

Вы, возможно, ищете разработчиков в вашу команду для реализации приложения. Если у вас есть деньги и вы можете заплатить разработчику или фирме, то всё просто и понятно. Далее мы поговорим о том, что делать, если у вас недостаточно денег, чтобы платить кому-то.

Осознайте, что ваша идея может быть не уникальна, а разработка требует значительных усилий.

  • Нарисуйте дизайн вашего приложения (внешний вид и функциональность). Он может быть грубым и нарисован на бумаге. Но он должен быть достаточно конкретным, а не размытым.
  • Составьте список своих навыков, связанных с идеей.
  • Составьте список того, что вы вложите в свою идею.

Поймите, что разработка требует значительных усилий. Представьте, что разработчик работает полный рабочий день (8 часов) на протяжении 2 месяцев, чтобы создать ваше приложение. И вы также работаете полный рабочий день. Что вы делаете в это время? Если ваша работа, по вашим представлениям, заканчивается раньше, то нужно пересмотреть идею. В этом сценарии разработчик выполняет большую часть работы, и вы, честно говоря, бесполезны. То, что вы можете дать после того, как приложение закончено, не имеет особого значения и не будет мотивировать разработчика заканчивать продукт.

Пересмотр вашей идеи

Если разработчик выполняет больше работы, чем вы, нужно пересмотреть идею, чтобы распределить работу более справедливо. Это даст преимущества от совместной работы. Посмотрите на ваш список навыков и подумайте, как их можно применить. Это нормально, если приложение будет отличаться от начальной задумки. Пересматривайте его до тех пор, пока количество вашей работы и работы разработчика, как минимум, не сравняются.

  • Распределяйте работу настолько справедливо, насколько это возможно.
  • Фокусируйтесь прежде всего на ваших навыках.
  • Ваша загрузка должна примерно равняться 2 месяцам полноценной работы. Для простых приложений загрузка, конечно, может быть меньше. Вы можете попросить сообщество (например,

Если вы давно хотели научиться программировать и перейти в IT, следующая подборка бесплатных приложений именно для вас

Программирование по Android

С помощью этого мобильного сервиса можно научиться создавать приложения и виджеты для мобильных устройств на платформе Android . Также есть возможность проводить тестирование для пользователей. Этот Android Tutorial содержит широкий спектр функций. Разработчики делают акцент на следующих преимуществах приложения:

  • текстовый электронный учебник со множеством полезных статей,
    . плеер для просмотра учебных видео с YouTube ,
    . электронное пособие для тестирования.

Кроме это, немаловажно, что вся учебная информация на русском языке; есть несколько видов учетных записей - обычный пользователь и админ (для добавления, редактирования и удаления учебного материала и тестов, удаления пользователей); закрепление материала проводится с помощью тестов; статистика предоставляет изменение личных данных и отслеживание результатов тестирований.

Основы HTML & CSS Light (Android)

Приложение для интерактивного изучения основ HTML и CSS. Пользователь может создать свою первую html-страницу прямо в этом приложении и увидеть результат в браузере смартфона. Приложение также содержит таблицу спецсимволов и палитру web-цветов.

Пользователи, которые уже успели попробовать это приложение, в отзывах благодарят разработчика за доступное и доходчивое объяснение. Отзыв «можно учить в транспорте» подтверждает простоту приложения один из начинающих разработчиков.

Изучаем Java (Android)

Приложение Learn Java состоит из 70 уроков, которые содержат основные темы базовой Java. Каждый урок подкреплен множеством соответствующих примеров, которые помогают выучить основы программирования. Материал представлен в виде несложных задач в игровом стиле.

Оно предлагает простые задания с пропущенными элементами кода, которые располагаются внизу экрана. Пользователю нужно правильно вставить соответствующие элементы, чтобы программа скомпилировалась и правильно вывела на экран ответ. Ответ должен полностью соответствовать ответу в тексте условия к заданию, в противном случае программа выдаст ошибку.

Если пользователь ответил правильно, программа похвалит его. Если ошибся - подскажет правильный ответ. Доступ к следующему уроку можно получить, ответив правильно на 1 из 10 последних вопросов. В каждом уроке есть теория.

Codecademy (iOS)

Это приложение отлично подойдет новичкам, которые уже немного знакомы с азами и хотят понять структуру кода. В Codecademy содержатся простые, веселые упражнения, которые помогут пользователю потренироваться, когда он не рядом с компьютером. Позже, когда он вернется на рабочее место, сможет проверить и закрепить знания, полученные в течение дня.

Все занятия разделены на группы. В каждой группе есть несколько заданий, выполнив которые пользователь получает оценку за свою работу. Изначально есть всего пять задач, но при первом включении приложение спросит о том, стоит ли уведомлять при поступлении новых заданий. Они будут добавляться постепенно. С каждым новым уроком, задания становятся все сложнее и сложнее, но сохраняют свою игровую форму.

Lightbot (iOS, Android)

Лучший способ заинтересовать ребенка программированием - это начать обучение как можно раньше. И самое лучшее - это преподнести процесс обучения в виде. Lightbot - это игра-головоломка о программировании, созданная канадским студентом Дэнни Ярославским. Цель игры - заставить робота подсветить все голубые плитки на 3D-решетке. Сложность состоит в том, что это нужно сделать в один подход, создав для робота серию команд. Это приложение познакомит ребенка с такими понятиями, как переменные, циклы и т.д. Игровой подход принесет большие результаты, чем насильное обучение. Фритц Руэр, доцент компьютерных наук Уилламеттского университета штата Орегон, говорит, что при кажущейся простоте, Lightbot освещает интересные аспекты продвинутого программирования.

Приветствую вас, уважаемые любители операционной системы Андроид (Android). В сегодняшней статье я постараюсь максимально полно осветить очень интересную тему – подборку инструментов для создания своего приложения (онлайн) для гаджетов на базе, популярной, операционной системы Android.

С развитием мобильных технологий, развивается и рынок мобильных приложений, в том числе и рынок мобильных приложений для ОС Андроид (Android) . Если раньше сделать приложение мог только продвинутый программист с толстыми очками, прошедший пять лет обучения в университете, то теперь эта возможность доступна любому желающему, причем абсолютно незнакомому с языками программирования, причем, также, не выключаясь от интернета, т.е. онлайн.

В подборке вы найдёте четыре инструмента, которые позволят вас сделать приложение — быстро и просто. Все предложенные инструменты похожи на конструкторы, вам предстоит собрать ваше первое приложение из различных готовых компонентов, создать приложение можно точно также, как вы собираете конструктор лего.

Все инструменты отбирались по следующим критериям :

  • Удобство использования . Так как пользоваться таким инструментом будут, в основном, люди не знакомые с программированием и сложными элементами, то главный упор, в этой небольшой подборке, был сделан на удобство и простоту использования предложенных инструментов;
  • Интуитивно понятный интерфейс . Этот пункт и условие логически вытекает из предыдущего. Помимо того, что интерфейс инструмента создания приложений для ОС Андроид (Android) должен быть простым, он еще должен быть интуитивно-понятным;
  • Возможности . Чем больше различных вещей “умеет” делать инструмент – тем лучше. По сути, все представленные приложения имеют один и тот же набор инструментов, с небольшими различиями и изменениями.

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

TheAppBuilder

Неплохой инструмент создания приложений. Несомненно, радует тот факт, что данным инструментом вы можете пользоваться абсолютно бесплатно. Минус в том, что данный программный продукт не поддерживает русский язык, но если вы учили в школе английский, хотя бы немного, то проблем с использованием TheAppBuilder возникнуть не должно. Из всех возможностей данного программного продукта хочется отметить следующие :

  • Большой выбор шаблонов для создания вашего Андроид (Android) приложений. Если вы хотите сделать простую программку, то из предложенных вариантов шаблонов вы без труда подберете нужный;
  • Возможность просматривать подробную статистику по созданному вами приложению;
  • Простая и понятная публикация, созданного вами, приложения в Google Play.

AppsGeyser


Еще один хороший, качественный инструмент заслуживающий пристального внимания. Как я уже говорил выше, чтобы создать )) вам не понадобится уметь программировать под Андроид (Android), в данной программе все настолько просто, что создать приложение для своего проекта вы сможете за несколько минут, просто собрав его из частей “конструктора”. Ниже, вы можете ознакомиться с возможностями предложенного инструмента :

  • Большой архив шаблонов на различные тематики: рестораны, пиццерии, фото-студии, праздники, спорт, радио, грузоперевозки и много, много других шаблонов. Вам нужно только выбрать подходящий и начать его редактирование под свои нужды;
  • Встроенные инструменты продвижения вашего нового приложения. Порой, чтобы продвинуть и раскрутить ваше новое приложение нужно потратит много сил и времени, строенные инструменты продвижения в конструкторе смогут облегчить вашу задачу;
  • Возможность подключения вашей программы к рекламной сети, таким образом вы сможете зарабатывать деньги на созданных вами приложениях.

В статье описаны основные трудности создания приложений под Android.
Рассматриваются базовые понятия программирования Android.
Для примера описано создание игры Sudoku из книги Hello, Android – Ed Burnette .
Осторожно много скриншотов.

1. Трудности разработки

Android это уникальная операционная система. Разработчик приложений должен знать ее особенности и нюансы для получения хорошего результата. Существуют некоторые трудности, которые нужно учитывать при разработке (). Перечислим их кратко:
1) Приложение требует для установки в два раза (или даже в четыре) больше места чем оригинальный размер приложения.
2) Скорость работы с файлами на встроенной флэшке падает в десятки раз при уменьшении свободного места.
3) Каждый процесс может использовать до 16 Мб (иногда 24 Мб) оперативной памяти.

2. Принципы разработки производительных приложений под Android

Для работы нужен Android SDK и Eclipse. О том как все установить и начать написано .

Для загрузки проекта в Eclipse ножно выполнить такую последовательность действий:
1) Разархивировать проект в отдельную папку в рабочем пространстве Eclipse.
2) Выбрать пункт меню File->New->Android Project.
3) В диалоге New Android Project выбрать опцию Create project from existing source.
4) В поле Location указать путь к папке с проектом. Нажать Next.

Меню программы

Игровое меню описано в файле res/layout/main.xml. Описание интерфейса можно редактировать в виде XML или в виде визуализированного интерфейса. Для переключения служат вкладки внизу области отображения содержимого.

Обычно элементы управления содержатся внутри контейнера, в нашем случае это LinearLayout. Он располагает все элементы в виде одной колонки.

Ресурсы

Обратите внимание, что все текстовые надписи (android:text) берут данные из ресурсов. Например, запись android:text="@string/main_title" указывает, что текст нужно искать в файле res/values/string.xml в узле с именем main_title (Android Sudoku). Цвет фона также содержится в ресурсах (android:background="@color/background") но в файле color.xml (#3500ffff). При открытии файлов ресурсов в редакторе может возникнуть ошибка. Но всегда можно перейти к отображению XML.

Элементы управления к которым нужно получить доступ из кода должны иметь id. У кнопок есть id (android:id="@+id/continue_button") для того что бы было можно присоединить к кнопке обработчик нажатия. Знак плюс указывает, что для кнопки нужно создать идентификатор в файле /gen/org.example.sudoku/R.java (public static final int continue_button=0x7f0b000b;). Этот файл генерируется автоматически и не рекомендуется его изменять. Файл содержит класс R через него можно обратиться к любому элементу интерфейса и другим ресурсам.

Создание окон

Рассмотрим создание окна с информацией о программе. Разметка этого окна находится в файле /res/layout/about.xml. Activity класс описан в файле /src/org.example.sudoku/About.java. Activity связана с разметкой в файле AndroidManifest.xml. Этот файл можно просматривать или через редактор или в виде XML. На разных вкладках редактора можно выбрать различные разделы файла. В разделе Application находятся параметры Activity. Обратите внимание, что параметр Theme имеет значение :style/Theme.Dialog. Благодаря этому стиль окна больше похож на модальный диалог.

Вызов окна с информацией о программе осуществляется из класса Sudoku по нажатию кнопки About. Класс Sudoku написан так, что сам обрабатывает событие Click (public class Sudoku extends Activity implements OnClickListener). В методе public void onClick(View v) определяется какая кнопка вызвала событие и выполняется соответствующий код. Для показа окна About вызывается соответствующий Intent.
case R.id.about_button:
Intent i = new Intent(this, About.class);
startActivity(i);
break;

Обработчики событий также могут устанавливаться на конкретные элементы управления. Например в классе Keypad при создании класса в методе setListeners() устанавливаются обработчики для отдельных кнопок.

Простой диалог

Пользователю нужно дать возможность выбрать уровень сложности. Это маленький диалог, в котором нужно выбрать один из нескольких вариантов. Очень радует, что для этого не нужно создавать отдельный Intent, а достаточно воспользоваться классом AlertDialog.
Разберем процес старта новой игры. Пользователь нажимает на кнопку New Game. Обработчик нажатия это метод класса Sudoku – onClick. Далее вызывается метод openNewGameDialog, который показывает диалог выбора сложности и стартует игру с выбранным уровнем сложности. Это диалог строится с помощью класса AlertDialog.

Private void openNewGameDialog() { new AlertDialog.Builder(this) .setTitle(R.string.new_game_title) .setItems(R.array.difficulty, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { startGame(i); } }) .show(); }

Обратите внимание, что содержимое диалога (набор кнопок) строится из массива строк R.array.difficulty. Тут же назначается обработчик нажатия на кнопки диалога, который по номеру нажатой кнопки запускает новую игру с заданным уровнем сложности, вызывая метод startGame.

Графика

За игровую логику отвечает класс Game. Тут загружаются задания, проверяются условия выигрыша. Класс Game есть Activity но интерфейс описан не в XML, а создается кодом. В методе onCreate создается View:

PuzzleView = new PuzzleView(this);
setContentView(puzzleView);
puzzleView.requestFocus();

PazzleView это класс производный от View, в нем рисуется игровое поле и происходит обработка событий касания экрана (метод onTouchEvent) и нажатия клавиш (метод onKeyDown).

Разберем процесс рисования в Android. Для рисования нужно перегрузить метод onDraw. Метод получает объект Canvas через который осуществляется рисование. Для задания цветов создаются обьекты класса Paint. Цвет задается в формате ARGB. Цвет лучше хранить в виде ресурсов (файл colors.xml). Paint это не только класс для хранения информации о цвете. Например при рисовании текста он содержит информацию о способе закрашивания, шрифте и выравнивании текста.

Canvas содержит набор методов для рисования графики (drawRect, drawLine, drawPath, drawText и другие).

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

Музыка

Для воспроизведения музыки используется класс MediaPlayer. Музыка для игры добавлена в ресурсы. Нужно просто скопировать нужные файлы в папку /res/raw (форматы WAV, AAC, MP3, WMA, AMR, OGG, MIDI).
Для начала нужно создать экземпляр класса MediaPlayer:
mp = MediaPlayer.create(context, resource);
тут context это обычно класс, который инициирует запуск музыки, resource – идентификатор ресурса с музыкой. Для управления воспроизведением используют методы start, stop и release.

В игре музыка воспроизводится в главном меню (запуск из класса Sudoku) и в игровом процессе (запуск из класса Game). Для управления воспроизведением создан класс Music. Класс содержит статический экземпляр MediaPlayer, что позволяет не создавать отдельный проект для каждого запуска звукового ресурса.

В классах Sudoku и Game переопределены методы onResume и onPause, в которых запускается музыка при старте Activity и останавливается при деактивации.

Выводы

Пример, который рассматривается в статье не слишком сложный, что позволяет в нем разобраться без особых усилий. При этом он затрагивает различные аспекты разработки под Android.

P.S. Большое спасибо пользователю

Вы знаете, как стать программистом Android всего за 8 месяцев и получать не менее 100 000 рублей в месяц, работая из дома и без конца путешествуя? Хотите открыть собственный бизнес и чтобы вас все уважали и ценили?

Тогда я хочу в какой-то мере предостеречь вас от попытки заняться самообразованием с помощью многочисленных платных интернет-курсов, на которых очень часто разводят лохов. Если вы интересуетесь поисковой оптимизацией, веб-дизайном и программированием, то вам необходимо понимать простую вещь...

Во-первых, все отзывы вроде «Я продавал CD-диски в переходе, но купив доступ к лекциям на Geek brains, через 3 месяца упорного труда стал программистом. Ребята, главное, верить!» пишутся копирайтерами. Во-вторых, ни один из продавцов курсов не предупредит вас о том, какой уровень знаний уже нужно иметь, чтобы приступить к обучению. Велик шанс, что вы откроете учебники и…не поймёте даже то, как инсталлировать программу для создания кода. А деньги вам назад не вернут.

Говорят, что тот же сайт Java rush, где преподаётся Java в качестве игры и довольно сумбурно, может иметь какую-то пользу, но при условии, что вы уже…тут я попрошу минуточку, знаете другие языки программирования. Сколько лет нужно, чтобы изучить язык Java досконально? Профессиональный программист, получивший образование в институте, сказал мне, что пишет на нём и продолжает его учить уже 5 лет, но всё ещё не овладел им в совершенстве. За спиной уже собственный небольшой бизнес, знание нескольких других языков, множество реализованных проектов, а Java он всё учит и учит!

Ключевые навыки:

Знание Java Core

Знание Android SDK

Опыт работы в IntelliJ IDEA, Eclipse, Android Studio

Опыт разработки Android-приложений на Java

Опыт работы с XML, JSON, HTTP, sockets

Знание Android API, понимание архитектуры Android, пользовательский интерфейс, меню, диалоги, ресурсы, logcat, MVC

Intents, Fragments, Контент-провайдеры, бродкаст-ресиверы, Google Maps, виджеты, телефония, сенсоры, блютуз, графика и анимация

SQLite, Web, Concurrency

Базовое знакомство с гайд-лайнами Android последней версии

Понимание особенностей работы мобильного приложения в условиях слабого сигнала связи

Уверенное владение базовыми паттернами проектирования

Творческий подход к поставленным задачам

Умение писать чистый код и правильно создавать и использовать модульные тесты

Умение и желание приобретать новые навыки и осваивать новые технологии

Умение быстро разбираться в чужом коде‚ если это понадобится

А вот сколько денег обещают на Geek brains в итоге. То есть, они уверяют, что столько будут получать большинство из вас уже в процессе обучения:

Программист Android — 100 000 рублей

Мобильный разработчик — 130 000 рублей

Веб-разработчик — 100 000 рублей

Программист Java — 110 000 рублей

Разработка мобильных приложений под Android (Уровень 1, начальный):

Вы уже уверенно программируете на одном или нескольких языках и хотите разрабатывать приложения под Android? Сегодня это весьма престижная и хорошо оплачиваемая профессия, которая находится на пике популярности. Однако чтобы стать хорошим разработчиком, необходимо научиться писать качественные и функциональные приложения. Пройдя данный курс, вы получите практические навыки создания приложений и будете эффективно использовать возможности платформы и ресурсов Android.

Допустим, вы мечтаете стать программистом. Вы приходите и говорите:

— Запишите меня учиться на программиста Android!

А вам отвечают:

— Пока нет. Ну тогда запишите на Java SE8, а уже потом…

— А вы знаете Си и C++ ?

— Эээ…Нет.

— Запишите меня на Си!

— Если вы знаете основы программирования и баз данных и имеете эквивалентную подготовку…

Это означает, что до курса программирования Android вам придётся пройти ещё 3-5 разных курсов. И после прохождения вы уже сможете записаться на 6-й. Заметьте, это только первый уровень, начальный. Ни о каком трудоустройстве через полгода или год в качестве «программиста Android» речь вообще не идёт.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: