Главная страница
Навигация по странице:

  • TextEdit

  • Рис. 4.3.

  • Рис. 4.4.

  • Рис. 4.5.

  • =Palette=

  • Text Fields

  • Рис. 4.7.

  • Рис. 4.9.

  • Properties

  • 4.4 Реализация логики приложения Приступим непосредственно к программированию, работать будем с файлом src/com.example.projectn/MainActivity.java

  • Рис. 4.13.

  • TextView

  • Рис. 4.15.

  • осн прог. Цель лабораторной работы Установка и настройка среды программирования adt bundle Задачи лабораторной работы


    Скачать 3.46 Mb.
    НазваниеЦель лабораторной работы Установка и настройка среды программирования adt bundle Задачи лабораторной работы
    Анкоросн прог
    Дата05.01.2023
    Размер3.46 Mb.
    Формат файлаpdf
    Имя файлаOsnov_prog_ANDRUS.pdf
    ТипЛабораторная работа
    #873106
    страница2 из 7
    1   2   3   4   5   6   7
    Внимание: если Вы опубликовали свое приложение, Вы не можете менять имя
    пакета, т.к. имя пакета служит уникальным идентификатором для приложения и в случае его смены приложение будет рассматриваться, как совсем другое и пользователи предыдущей версии не смогут его обновить. android:versionCode
    - внутренний номер версии приложения не виден пользователю. Этот номер используется только для определения является ли одна версия более современной по сравнению с другой, больший номер показывает более позднюю версию. android:versionNumber
    - номер версии, является строкой и используется только для того, чтобы показать пользователю номер версии приложения. android:shareUserID, android:sharedUserLabel, android:installLocation
    - эти атрибуты в нашем файле манифеста не представлены, про их назначение можно почитать по ссылке: http://developer.android.com/guide/topics/manifest/manifest-element.html
    Рассмотрим элемент , который показывает совместимость приложения с версиями
    Android. Основные атрибуты: android:minSdkVersion - указывает значение минимального уровня API, необходимого для работы приложения. Система Android не позволит установить приложение, если уровень API ниже, чем уровень, указанный в этом атрибуте. Внимание: если этот атрибут не указан, система установит значение по умолчанию равным "1", которое означает, что приложение совместимо со всеми версиями Android. И в случае, если приложение не совместимо со всеми версиями, установка пройдет на любую версию Android, а во время работы приложение сломается, когда попытается обратиться к недоступным элементам API. Поэтому необходимо всегда указывать значение этого атрибута. android:targetSdkVersion - указывает уровень API целевой платформы Android приложения, если этот атрибут пропущен, по умолчанию принимается значение android:minSdkVersion. android:maxSdkVersion - указывает максимальное значение уровня API, под который разрабатывалось приложение. Если значение этого атрибута ниже, чем уровень API соответствующий версии Android, на которую устанавливается приложение, то система не позволит установить такое приложение.
    Если внимательно посмотреть на файл манифеста рис. 4.2
    , можно заметить, что данный атрибут в нем отсутствует. На самом деле разработчикам не рекомендуются задавать значение этого атрибута.
    Во-первых, это значение будет препятствовать использованию приложений на новых версиях
    Android при их появлении, несмотря на то, что все новые версии полностью обратно-совместимы.
    Во-вторых, стоит иметь ввиду, что задание этого атрибута может привести к тому, что приложение будет удалено с устройства после обновления Android до более высокого уровня API.
    Подробнее с элементом и его атрибутами можно ознакомиться по ссылке: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
    Рассмотрим элемент , который является обязательным элементом манифеста, полностью определяет состав приложения. Представляет собой контейнер для элементов ,
    , , ider> (и не только), каждый из которых определяет соответствующий компонент приложения. Содержит набор атрибутов, действие которых распространяется на все
    компоненты приложения. Рассмотрим атрибуты элемента , представленные в манифесте на рис. 4.2
    : android:allowBackup - определяет разрешение для приложения участвовать в резервном копировании и восстановлении. Если значение этого атрибута false, то для приложения никогда не может быть создана резервная копия, даже если проводится резервное копирование всей системы целиком. По умолчанию значение этого атрибута равно true. android:icon
    - определяет иконку для приложения целиком, а также иконку по умолчанию для компонентов приложения, которая может быть переопределена атрибутом android:icon каждого компонента. Задается как ссылка на графический ресурс, содержащий изображение, в нашем случае значение этого атрибута равно "@drawable/ic_launcher". android:label
    - определяет видимый для пользователя заголовок приложения целиком, а также заголовок по умолчанию для компонентов приложения, который может быть переопределен атрибутом android:label каждого компонента. Задается как ссылка на строковый ресурс, в нашем случае значение атрибута равно "@string/app_name". android:theme
    - определяет тему по умолчанию для всех активностей приложения, может быть переопределен атрибутом android:theme каждой активности. Задается как ссылка на стилевой ресурс, в нашем случае значение атрибута равно "@style/AppTheme".
    На самом деле у элемента гораздо больше атрибутов, чем нам удалось рассмотреть, найти полный список атрибутов с описаниями можно по ссылке: http://developer.android.com/guide/topics/manifest/application-element.html
    В приложении всего одна активность, других компонентов нет, в связи с этим элемент в манифесте содержит ровно один элемент и больше никаких других элементов не содержит. Рассмотрим элемент , который определяет активность. Для каждой активности обязательно необходим свой элемент в манифесте. Рассмотрим атрибуты элемента
    , представленные в манифесте на рис. 4.3
    : android:name
    - определяет имя класса, который задает активность. Значение атрибута должно полностью определять имя класса с указанием пакета, в котором располагается класс. В нашем случае атрибут имеет значение:
    "com.example.projectn.MainActivity". Можно использовать сокращенную запись ".MainActivity", в этом случае добавляется имя пакета, определенное соответствующим атрибутом элемента . android:configChanges - перечисляет изменения конфигурации, которыми может управлять активность. Если конфигурация меняется во время работы, то по умолчанию активность останавливается и перезапускается. Если же изменение конфигурации указано в этом атрибуте, то при появлении этого изменения активность не перезапускается, вместо этого она продолжает работать и вызывает метод onConfigurationChanged(). В нашем случае атрибут имеет значение "orientation|keyboardHidden|screenSize", т. е. при смене ориентации экрана, смене размера экрана и изменении доступности клавиатуры не произойдет перезапуск активности. android:label
    - определяет видимый пользователю заголовок активности, если он отличается от общего заголовка приложения. Задается как ссылка на строковый ресурс, в нашем случае значение атрибута равно "@string/app_name"(т.е. можно было и не задавать). android:theme
    - определяет тему активности, если она отличается от общей темы
    приложения, заданной соответствующим атрибутом элемента .
    Задается как ссылка на стилевой ресурс, в нашем случае значение атрибута равно "@style/FullscreenTheme".
    На самом деле у элемента гораздо больше атрибутов, чем нам удалось рассмотреть, найти полный список атрибутов с описаниями можно по ссылке: http://developer.android.com/guide/topics/manifest/application-element.html
    В манифесте для нашего приложения элемент содержит ровно один элемент: , определяющий типы намерений, которые может принимать активность. Этот элемент содержит два элемента: и .
    Первый элемент определяет действия, которые проходят в фильтр намерений, при этом должен содержать хотя бы один элемент , в противном случае ни один объект-намерение не сможет пройти через фильтр и активность не возможно будет запустить. Элемент имеет единственный атрибут android:name="android.intent.action.MAIN".
    Второй элемент определяет имя категории в фильтре намерений. Имеет единственный атрибут android:name="android.intent.category.LAUNCHER".
    На этом разбор манифеста приложения закончим, подробно с описанием всех элементов этого файла можно познакомиться по ссылке: http://developer.android.com/guide/topics/manifest/manifest-intro.html
    Чаще всего, при создании приложения приходится иметь дело с папками src, res/layout и res/values, т.к. там находятся основные файлы проекта.
    4.3 Настройка интерфейса приложения
    До того, как начнем формировать интерфейс, имеет смысл подготовить возможность проверки разрабатываемого приложения на ошибки. Чтобы не загружать каждый раз приложение на реальное устройство, в Android SDK предусмотрена возможность использования виртуального устройства
    (AVD или Android virtual device), эмулирующего работу реального смартфона. Процесс создания виртуального устройства или эмулятора подробно расписан в "Установка и настройка среды программирования ADT Bundle"
    Пришло время задуматься о внешнем виде приложения. Для начала необходимо определить какие элементы графического интерфейса нам нужны, как эти элементы будут располагаться на форме и каким образом будет реализовано взаимодействие с пользователем.
    Так как приложение очень простое, то и интерфейс особой сложностью отличаться не будет. Нам потребуется поле для ввода чисел (TextEdit), текстовая метка для вывода информации (TextView) и кнопка для подтверждения введенного числа (Button). Располагать элементы интерфейса будем друг под другом, сверху информационная часть, ниже поле ввода, кнопку разместим в самом низу приложения. Взаимодействие приложения с пользователем организуется очень просто: пользователь вводит число в поле для ввода и нажимает кнопку, читает результат в информационном поле и, либо радуется победе, либо вводит новое число.
    Если пользователь вводит правильное число, то приложение предлагает ему сыграть снова при этом кнопка будет играть роль подтверждения, а в информационное поле будет выведено приглашение к повторной игре.
    Схематично интерфейс приложения изображен на рис. 4.3

    Рис. 4.3. Схема интерфейса приложения "Угадай число"
    Нам необходимо добавить на форму три элемента: информационное поле (TextView), поле ввода
    (TextEdit
    ) и кнопку (Button).
    Android
    IDE поддерживает два способа для выполнения действий по формированию интерфейса приложения: первый основан на XML-разметке, второй относится к визуальному программированию и позволяет перетаскивать объекты интерфейса и размещать их на форме с помощью мыши.
    Считается, что визуальный способ подходит для новичков, а более продвинутые разработчики могут писать код вручную, однако чаще всего используется комбинированный подход.
    Для формирования интерфейса будем работать с файлом res/layout/activity_main.xml. На рис. 4.4
    можно увидеть редактор, соответствующий визуальному способу формирования интерфейса, этому режиму соответствует вкладка Graphical Layout.
    увеличить изображение
    Рис. 4.4. Графическое изображение активности приложения
    На рис. 4.4
    рядом с вкладкой Graphical Layout расположена вкладка activity_fullscreen.xml. Она соответствует режиму редактирования интерфейса путем формирования XML файла. На рис. 4.5
    можно увидеть редактор XML файла. увеличить изображение
    Рис. 4.5. Описание активности в XML формате
    Зададим табличное расположение компонентов на форме, для этого выберем вкладку Layouts, найдем там TableLayout и добавим его на форму. На рис. 4.6
    можно увидеть результат этих действий.
    увеличить изображение
    Рис. 4.6. Настройка интерфейса, добавление TableLayout
    Теперь начнем добавлять элементы интерфейса, будем использовать графический режим правки.
    Во-первых, нам необходимо добавить информационное поле. Для этого на панели =Palette= выбираем вкладку Form Widgets, на этой вкладке найдем поле TextView, перенесем в окно приложения, разместим в первой строке таблицы (TableLayout).
    Во-вторых, нам потребуется поле ввода информации, на вкладке Text Fields найдем текстовое поле
    Number и разместим во второй строке таблицы.
    В-третьих, вернемся на вкладку Form Widgets, выберем там элемент Button и добавим в третью строку таблицы. Не нужную четвертую строку таблицы удалим, получим следующий вид приложения, см. рис. 4.7
    увеличить изображение
    Рис. 4.7. Интерфейс приложения
    После настройки интерфейса можно заглянуть в файл activity_main.xml, в этом файле прописано, что используется TableLayout и дано описание каждой из трех строк. На рис. 4.8
    можно увидеть, как выглядит такое описание на примере первой строки таблицы. увеличить изображение
    Рис. 4.8. Фрагмент файла activity_main.xml, описание строки в TableLayout
    Теперь необходимо наполнить наши элементы интерфейса смыслом, нам понадобится текст для общения с пользователем, при программировании под Android существует практика разделять
    ресурсы и код приложения. Для хранения любых строк, которые могут понадобиться приложению, используется файл strings.xml. Хранение всех строковых ресурсов в этом файле серьезно облегчает локализацию приложения на другие языки. Этот файл можно найти в Package Explorer в папке
    res/values
    . Откроем его и посмотрим, что там есть, см. рис. 4.9
    увеличить изображение
    Рис. 4.9. Файл string.xml
    Уберем лишние строки и добавим новые, результат можно посмотреть на рис. 4.10
    Рис. 4.10. Отредактированный файл string.xml
    Данные переменные будут выполнять следующие задачи:
    • app_name установит "видимое" название приложения;
    • behind, ahead, hit оповестят пользователя об его успехах в игре;
    • play_more и try_to_guess установит название кнопки, которое объяснит её функции;
    • input_value пригласит пользователя к вводу числа;
    • error сообщит о неверном вводе.
    После изменения strings.xml, при переходе на другую вкладку, не забудьте сохранить изменения
    (самый быстрый способ - нажать Ctrl+S).

    Настроим текст в информационном поле. Для этого на вкладке Properties в правой части окна выберем элемент textView1 (это и есть наше информационное поле, имеет смысл придумать ему более осмысленное имя). Найдем свойство Text, подставим в него значение строки с именем try_to_guess, см. рис. 4.11
    Аналогично можно настроить текст, которым нас будет приветствовать кнопка, только в этом случае надо работать с элементом button1. увеличить изображение
    Рис. 4.11. Настройка текста для кнопки button1
    Пришло время вспомнить о виртуальном устройстве, если оно работает, уже можно запустить проект и посмотреть, как приложение будет выглядеть на экране устройства, а выглядеть оно может как показано на рис. 4.12

    Рис. 4.12. Запуск приложения на виртуальном устройстве
    Приложение выглядит довольно просто, но мы на многое и не рассчитывали. Главное, что нас интересует, это наличие всех элементов на экране, верный текст в каждом элементе, где он предусмотрен и возможность вводить числа в поле ввода. На рис. 4.12
    видно, что все требования выполнены. Приложение есть, его можно запустить на виртуальном или реальном устройстве, но оно ничего не делает. Следующим шагом будет реализация логики приложения, т. е. обработка события нажатия на кнопку, как было прописано в задании.
    4.4 Реализация логики приложения
    Приступим непосредственно к программированию, работать будем с файлом
    src/com.example.projectn/MainActivity.java
    . Найдем этот файл в Package Explorer см. рис. 4.13
    , откроем и начнем редактировать.

    Рис. 4.13. Файл MainActivity.java в Package Explorer
    Пока файл выглядит следующим образом, см. рис. 4.14
    увеличить изображение
    Рис. 4.14. Файл MainActivity.java после создания приложения
    Можно заметить, что класс MainActivity является наследником класса Activity и в нем уже реализован метод onCreate(), который запускается при первоначальном создании активности, нам потребуется его дополнить, но об этом чуть позже.

    Мы предполагаем программно менять информацию в поле TextView, получать значение из поля
    EditText и обрабатывать события нажатия на кнопку Button, поэтому необходимо объявить соответствующие переменные, как поля класса MainActivity:
    TextView tvInfo;
    EditText etInput;
    Button bControl;
    Чтобы не было ошибок, необходимо импортировать пакет android.widget, который содержит все элементы графического интерфейса: import android.widget.*;
    На самом деле среда разработки подскажет, что делать.
    Теперь необходимо связать эти переменные с элементами интерфейса, уже добавленными нами в
    activity_main.xml
    , сделать это необходимо в методе onCreate(), а для получения уже созданного элемента интерфейса воспользуемся методом findViewById(). Итак в метод onCreate() добавим следующие строки: tvInfo = (TextView)findViewById(R.id.textView1); etInput = (EditText)findViewById(R.id.editText1); bControl = (Button)findViewById(R.id.button1);
    Метод findViewById() возвращает объект класса View, который является общим предком для всех компонентов пользовательского интерфейса, для того чтобы избежать возможных ошибок в скобках перед вызовом метода указываем до какого конкретно компонента необходимо сузить возможности объекта View.
    Пришло время выполнить обработку нажатия на кнопку. Вернемся к файлу activity_main.xml в графический режим редактирования, выберем элемент Button и на вкладке со свойствами элемента найдем свойство On Click и запишем в него onClick - имя метода, который будет обрабатывать нажатие на кнопку. Как это выглядит показывает рис. 4.15
    увеличить изображение
    Рис. 4.15. Настройка свойства On Click для кнопки
    Эти же действия можно выполнить в фале activity_main.xml, достаточно дописать выделенную на рис. 4.16
    строку:
    Рис. 4.16. Настройка свойствами On Click для кнопки в файле XML
    Для настройки свойств элементов интерфейса достаточно использовать любой способ: графический или редактирование XML файла.
    Вернемся в файл MainActivity.java, в класс активности необходимо добавить метод: public void onClick(View v){...}
    Имя метода не обязательно должно быть onClick(), главное, чтобы оно совпадало с именем, указанным в свойстве
    1   2   3   4   5   6   7


    написать администратору сайта