Создание первого приложения и добавление Activity

Последнее обновление: 14.10.2021

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

Итак, возьмем ранее созданный проект (или создадим новый).

Добавление новой Activity

И по умолчанию у нас уже есть одна activity - класс MainActivity. Теперь добавим еще одну. Для этого нажмем правой кнопкой мыши в структуре проекта на папку, в котором находится класс MainActivity, и затем в контекстном меню выберем New->Activity->Empty Activity:

Добавление новой activity в Android Studio

После этого откроется диалоговое окно создания новой activity:

Создание новой activity в Android Studio

В этом окне в поле Activity Name введем MessageActivity. После этого в поле Layout Name автоматически должно установиться activity_message (если не устновилось, то введем в это поле activity_message). В остальных полях оставим значения по умолчанию:

  • Package Name - должен иметь то же название, что и пакет, в котором находится MainActivity

  • Source Language должен иметь значение Java

И затем нажмем Finish.

После этого в папке с MainActivity должен появиться файл с новой activity - MessageActivity:

Добавление Activity в Android Studio

Кроме того, в каталоге res/layout должен появиться файл activity_message.xml, который представляет описание графического интерфейса для MessageActivity.

Вначале откроем файл activity_message.xml и изменим его код следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MessageActivity">
    <TextView
        android:id="@+id/messageText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Определение интерфейса для MessageActivity содержит только элемент TextView, который выводит некоторую строку на экран. Рассмотрим установленные в нем атрибуты:

  • android:id="@+id/messageText" - TextView имеет идентификатор "messageText", через который мы сможем обращаться к TextView в коде java. Символ @ указывает XML-парсеру использовать оставшуюся часть строки атрибута как идентификатор. А знак + означает, что если для элемента не определен id со значением messageText, то его следует определить.

  • android:layout_width="wrap_content" - ширина текстового поля будет такой, чтобы вместить все его содержимое на экране

  • android:layout_height="wrap_content" - высота TextView будет такой, чтобы вместить все его содержимое на экране

  • android:textSize="18sp" - высота текста в TextView составляет 18 единиц (для установки высоты шрифта используется величина sp)

  • app:layout_constraintBottom_toBottomOf="parent" - нижний край TextView будет выравниваться по нижней стороне контейнера ConstraintLayout

  • app:layout_constraintLeft_toLeftOf="parent" - левая граница TextView будет выравниваться по левой стороне контейнера ConstraintLayout

  • app:layout_constraintRight_toRightOf="parent" - правый край TextView будет выравниваться по правой стороне контейнера ConstraintLayout

  • app:layout_constraintTop_toTopOf="parent" - верхний край TextView будет выравниваться по верхней стороне контейнера ConstraintLayout

Добавление layout и activity в Java в Android Studio

Получение данных

Суть MessageActivity будет заключаться в том, что она будет получать некое текстовое сообщение и выводить его на экран (формально в элемент TextView, который был определен выше). Как мы можем получить в MessageActivity (и в любой другой activity) некоторые данные, которые переданы из другой activity?

Возьмем код класса MessageActivity. По умолчанию он выглядит так:

package com.example.helloapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MessageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message);
    }
}

И изменим его следующим образом:

package com.example.helloapp;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class MessageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_message);

        // Получаем объект Intent, который запустил данную activity
        Intent intent = getIntent();
        // Получаем сообщение из объекта intent
        String message = intent.getStringExtra("message");
        // Получаем TextView по его id
        TextView messageText = findViewById(R.id.messageText);
        // устанавливаем текст для TextView
        messageText.setText(message);
    }
}

Также, как и в MainActivity (и в других activity), создание текущей activity происходит в методе onCreate(). Все классы activity должны реализовать метод onCreate, так как система вызывает его при создании новой activity. Именно в этом методе задается компоновка нового объекта activity с помощью метода setContentView и именно здесь происходит начальная настройка компонентов.

Каждый объект Activity вызывается объектом Intent. Мы можем в коде Java получить вызывающий объект Intent с помощью метода getIntent:

Intent intent = getIntent();

Но Intent нам важен не сам по себе, а потому что через него в эту activity будут передаваться данные. Эти данные могут представлять различные типы, но в здесь мы предполагаем, что в MainActivity будет передаваться строка. И для получения строки у объекта Intent вызывается метод getStringExtra():

String message = intent.getStringExtra("message");

В метод передается ключ данных. То есть каждый элемент передаваемых данных представлен в формате "ключ-значение". Через ключ мы можем получить значение. И в данном случае ключом будет "message". А значение по этому ключу попадет в переменную String message.

Получив переданные в MessageActivity данные, мы можем передать их в TextView для вывода на экране устройства. Для этого вначале находим виждет TextView по его id и затем вызываем его метод setText(), который устанавливает выводимый в TextView текст:

TextView messageText = findViewById(R.id.messageText);
messageText.setText(message);

Таким образом, MessageActivity получит переданное ей сообщение и выведет его в TextView. Теперь рассмотрим, как вызвать эту activity из MainActivity и как передать ей это сообщение.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850