Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Создание графического приложения



Графический интерфейс пользователя основывается на иерархии объектов View и ViewGroup. Объекты View представляют виджеты, такие как кнопки или текстовые поля. Объекты ViewGroup представляют собой контейнеры для виждетов, управляют их расположением и компоновкой.

Итак, создадим новый проект приложения по тому способу, который мы использовали ранее. Либо используем предыдущий проект.

Создание линейной разметки

Выбранный при создании проекта для activity шаблон EmptyActivity добавляет все определение графического интерфейса в файл activity_main.xml, которые находятся в проекте в папке res/layout, поэтому изменим файл activity_main.xml следующим образом:

 

<? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout     xmlns: android=" http: //schemas.android.com/apk/res/android" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" horizontal" > < /LinearLayout>

 

Здесь определяется элемент LinearLayout, который является подклассом ViewGroup и который располагает дочерние элементы в горизонтальный или вертикальный ряд. Ориентация элементов указывается в атрибуте android: orientation. Каждый элемент в контейнере LinearLayout отображается на экране в том порядке, в каком он объявлен в файле XML.

Другие два атрибута - android: layout_width и android: layout_height требуются для всех виджетов для определения размеров. Поскольку LinearLayout является корневым элементом компоновки, он должен заполнить все пространство экрана, поэтому для его высоты и ширины указывается значение " match_parent". Данное значение растягивает виджет до границ родителького контейнера.

Добавление текстового поля

Для добавления текстового поля внутри элемента LinearLayout создадим элемент EditText. Как и для любого объекта View, для EditText также надо объявить определенные xml-атрибуты:

 

< EditText android: id=" @+id/edit_message" android: layout_width=" wrap_content" android: layout_height=" wrap_content"    android: layout_weight=" 1" android: hint=" Введите сообщение" />

 

Итак, мы определили следующие атрибуты:

· android: id: обеспечивает уникальный идентификатор виджета, по которому мы можем ссылаться на объект

Знак (@) для ссылки на ссылочный объект в файле XML. После него идет тип ресурса (в данном случае id), слеш и затем имя ресурса (edit_message).

Знак плюса (+) перед типом ресурса необходимо, когда в первый раз определяется ID ресурса. При компиляции приложения SDK использует имя ID для создания нового ресурса ID в файле gen/R.java. После этого больше не требуется употреблять знак плюса.

· android: layout_width и android: layout_height: для этих свойств устнавливаем значение wrap_content, которое задаст для виджетов величины, достаточные для отображения в контейнере

· android: layout_weight: позволяет определить занимаемую полем ширину. Значение 1 в данном случае позволяет растянуть поле на всю ширину.

· android: hint: указывает на текст, который будет отображаться в текстовом поле по умолчанию, когда оно пустое.

Добавление кнопки

Теперь добавим в файл activity_main.xml кнопку - элемент Button сразу после элемента EditText:

< Button android: layout_width=" wrap_content" android: layout_height=" wrap_content" android: text=" Отправить" />

В случае с кнопкой ее высота и ширина также имеют значение wrap_content, поэтому кнопка будет иметь те размеры, которые достаточны для вывода на ней ее текста. Для кнопки не нужно указывать атрибут android: id, поскольку мы не будем на нее ссылаться в коде MainActivity

В итоге файл будет иметь следующий вид:

 

<? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" horizontal" > < EditText android: id=" @+id/edit_message"    android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: layout_weight=" 1"    android: hint=" Введите сообщение" /> < Button   android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: text=" Отправить" /> < /LinearLayout>

И на данный момент приложение будет иметь следующий интерфейс:



Запуск второй Activity

В предыдущей теме мы создали приложение с использованием визуальных элементов: добавили к activity текстовое поле для ввода сообщения и кнопку. Теперь продолжим предыдущий проект и добавим запуск новой activity по нажатию на кнопку.

Обработка нажатия кнопки

Для подключения обработчика кнопки откроем файл activity_main.xml и добавим в элемент Button атрибут android: onClick:

<? xml version=" 1.0" encoding=" utf-8"? > < LinearLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: layout_width=" match_parent" android: layout_height=" match_parent" android: orientation=" horizontal" > < EditText android: id=" @+id/edit_message"    android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: layout_weight=" 1"    android: hint=" Введите сообщение" />    < Button   android: layout_width=" wrap_content"    android: layout_height=" wrap_content"    android: onClick=" sendMessage"    android: text=" Отправить" /> < /LinearLayout>

Значение " sendMessage", присвоенное атрибуту android: onClick, представляет собой имя метода, определенного в классе activity, который вызывает система при нажатии пользователем на кнопку. Далее мы определим этот метод.

Создание объекта Intent

Затем перейдем к классу MainActivity, который находится в проекте в папке app/src/main/java/[название_пакета], и изменим этот класс следующим образом:

package com.example.eugene.helloapplication; import android.content.Intent; // подключаем класс Intentimport android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; // подключаем класс View для обработки нажатия кнопкиimport android.widget.EditText; // подключаем класс EditText public class MainActivity extends AppCompatActivity { public final static String EXTRA_MESSAGE = " EXTRA_MESSAGE"; @Override protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main); } // Метод обработки нажатия на кнопку public void sendMessage(View view) {     // действия, совершаемые после нажатия на кнопку   // Создаем объект Intent для вызова новой Activity   Intent intent = new Intent(this, DisplayMessageActivity.class);    // Получаем текстовое поле в текущей Activity   EditText editText = (EditText) findViewById(R.id.edit_message);    // Получае текст данного текстового поля   String message = editText.getText().toString();    // Добавляем с помощью свойства putExtra объект - первый параметр - ключ,    // второй параметр - значение этого объекта   intent.putExtra(EXTRA_MESSAGE, message);             // запуск activity            startActivity(intent); }}

Здесь как раз и добавлен метод sendMessage(), который будет вызываться по нажатию на кнопку. Обработчик нажатия кнопки должен принимать в качестве параметра объект View, который представляет саму нажатую кнопку:

public void sendMessage(View view) {

Далее для запуска второй activity необходим объект Intent. Объект Intent представляет некоторую задачу приложения, которую надо выполнить (например, запуск activity):

Intent intent = new Intent(this, DisplayMessageActivity.class);

Конструктор этого объекта принимает два параметра:

· Первый параметр представляет контекст - объект Context (ключевое слово this употребляется здесь, так как класс MainActivity является подклассом класса Context)

· Вторым параметром идет класс компонента, которому мы передаем объект Intent. В качестве него будет выступать объект DisplayMessageActivity, который мы создадим чуть позже

Внутри метода sendMessage() используем метод findViewById, чтобы получить элемент EditText и передать значение его текста в объект intent:

 

EditText editText = (EditText) findViewById(R.id.edit_message); String message = editText.getText().toString();

Затем полученный из текстового поля текст передается в запускаемую activity:

intent.putExtra(EXTRA_MESSAGE, message);

Параметр " EXTRA_MESSAGE" указывает на ключ передаваемых данных. То есть мы можем в новую activity передать множество данных, и чтобы их можно было разграничить, для них устанавливается ключ. В данном случае ключ EXTRA_MESSAGE - эта обычная строка " EXTRA_MESSAGE":

public final static String EXTRA_MESSAGE = " EXTRA_MESSAGE";

Для запуска activity нужно вызвать метод startActivity() и передать ему в качестве параметра объект Intent:

startActivity(intent);

После вызова этого метода система получит сигнал и запустит новый объект Activity, определенный объектом Intent.


Поделиться:



Последнее изменение этой страницы: 2019-05-04; Просмотров: 243; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.019 с.)
Главная | Случайная страница | Обратная связь