Руководство Android для начинающих - основные примеры

View more Tutorials:

1- Введение

Статья основана на:
  • Android Studio 3.6.1

Вы смотрите серию статей инструкций по программированию  Android, это 2-ая статья, в данной статье я покаже вам пошагово как разработать приложение  Android, базовые знания о которых будет говориться включают:
  1. Вызов Activity из другого Activity.
  2. Обработка базового события.
  3. Разработка базового интерфейса и работа с ресурсом.
Перед тем, как начать с данной статьей, удостоверьтесь, что вы успешно запустили пример  "Hello Android" и изучите структуру проекта  Android. Вы можете пересмотреть:

2- Создайте project Android

Если вы работаете сt Android project на  Android Studio, закройте данный project, мы создадим другой project.
На  Android Studio выберите:
  • File/Close Project
Создать новый project:
Далее  Wizard спросит, хотите ли вы создать Activity или нет, выберите  "Add No Activity", wizard создаст только пустой project, не включая никакого  Activity.
Введите:
  • Name: AndroidBasic2
  • Package name: org.o7planning.androidbasic2
Создающийся проект будет использован для  Phone и Tablet.
Примечание: API 16, Android 4.1 сейчас используются почти на всех устройствах Phone и Table (Примерно 94%).
Ваш Project создан.

3- Создать MainActivity и дочерние Activity

Мы создадим главый Activity ( MainActivity), данный Activity будет вызван когда запустится приложение. На  MainActivity будут button для вызова других  Activity.
На  Android Studio выберите:
  • File/New/Activity/Empty Activity
MainActivity создан, включая 2 файла  MainActivity.java и main_activity.xml, информация данного  Activity зарегистрирована с  AndroidManifest.xml.
Индентично создадим еще другие 5 Activity.
  1. Example1Activity
  2. Example2Activity
  3. Example3Activity
  4. Example4Activity
  5. Example5Activity
На  Android Studio выберите:
  • File/New/Activity/Empty Activity

Примечание: Все только что созданные Activity не являются главным Activity, он был вызван с MainActivity, поэтому вам не стоит отмечать в "Launcher Activity".

OK, 5 новых  Activity созданы и они зарегистрированы с AndroidManifest.xml.

4- Дизайн интерфейса main_activity.xml

На  Android Studio откройте  main_activity.xml, чтобы сделать дизайн его интерфейса.
Окно дизайна имеет 3 режима (mode):
  • Code
  • Split
  • Design
В основном вы работаете в режиме  Design ( Design mode), он помогает вам перетащить компоненты в интерфейс и автоматически генерирует (generate)  XML код:
OK, мы смоделируем простой интерфейс, включая 5 Button:
Перетащите 5 Button в интерфейс:
Настроить ограничения (constraint) для  Button.
Настроить  ID, Text для  Button на интерфейсе. ID очень важен, в Java коде вы можете получить доступ к  Button через его  ID.
На окне дизайна, перейдите на режим  Code ( Code mode), вы увидите сгенерированный (generate)  XML код.
Ниже является содержание моего файла  activity_main.xml, вы можете копировать и вставить в ваше окно  Code, чтобы получить похожий интерфейс.
activity_main.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=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="Go to Example1 Activity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="Go to Example2 Activity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button1" />

    <Button
        android:id="@+id/button3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="Go to Example3 Activity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button2" />

    <Button
        android:id="@+id/button4"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="Go to Example4 Activity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button3" />

    <Button
        android:id="@+id/button5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:text="Go to Example5 Activity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button4" />
</androidx.constraintlayout.widget.ConstraintLayout>

5- Вызвать Activity из Activity

Here we will handle events when the user clicks on the Buttons, and they will call  Example1Activity, .. Example5Activity respectively.
Activities talk with each other via Intent object. For example,  Activity1 wants to call  Activity2 to run, it will encapsulate what needs to say, and the request to an Intent object  and send this Intent object to Activity2. You can see the illustration below.
Open  MainActivity class, you can access the Button(s) via its ID on Java code
// Get button by ID
Button button1 = (Button) this.findViewById(R.id.go_button1);

// Register listener user clicks on the button1.
button1.setOnClickListener(new Button.OnClickListener() {

  @Override
  public void onClick(View v) {

     // Create a Intent:
     // (This object contains content that will be sent to Example1Activity).

      Intent myIntent = new Intent(MainActivity.this, Example1Activity.class);

      // Parameter for Intent.
      myIntent.putExtra("text1", "This is text1 sent from MainActivity at " + new Date());
      myIntent.putExtra("text2", "This is text2 sent from MainActivity at " + new Date());

      // Start Example1Activity.
      MainActivity.this.startActivity(myIntent);
  }
});
Complete Code of MainActivity.java:
MainActivity.java
package org.o7planning.androidbasic2;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;

import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private Button button1;
    private Button button2;
    private Button button3;
    private Button button4;
    private Button button5;

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

        // Find Button by its ID
        this.button1 = (Button) this.findViewById(R.id.button1);

        // Find button by its ID
        this.button2 = (Button) this.findViewById(R.id.button2);

        // Find button by its ID.
        this.button3 = (Button) this.findViewById(R.id.button3);

        // Find button by its ID.
        this.button4 = (Button) this.findViewById(R.id.button4);

        // Find button by its ID.
        this.button5 = (Button) this.findViewById(R.id.button5);

        // Called when the user clicks the button1.
        button1.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Create a Intent:
                // (This object contains content that will be sent to Example1Activity).
                Intent myIntent = new Intent(MainActivity.this, Example1Activity.class);

                // Put parameters
                myIntent.putExtra("text1", "This is text1 sent from MainActivity at " + new Date());
                myIntent.putExtra("text2", "This is text2 sent from MainActivity at " + new Date());

                // Start Example1Activity.
                MainActivity.this.startActivity(myIntent);
            }
        });

        // Called when the user clicks the button2.
        button2.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Create a Intent:
                // (This object contains content that will be sent to Example2Activity).
                Intent myIntent = new Intent(MainActivity.this, Example2Activity.class);

                // Start Example2Activity.
                MainActivity.this.startActivity(myIntent);
            }
        });

        // Called when the user clicks the button3.
        button3.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Create a Intent:
                // (This object contains content that will be sent to Example3Activity).
                Intent myIntent = new Intent(MainActivity.this, Example3Activity.class);


                MainActivity.this.startActivity(myIntent);
            }
        });

        button4.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Create a Intent:
                // (This object contains content that will be sent to Example4Activity).
                Intent myIntent = new Intent(MainActivity.this, Example4Activity.class);

                // Start Example4Activity.
                MainActivity.this.startActivity(myIntent);
            }
        });

        button5.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Create a Intent:
                // (This object contains content that will be sent to Example5Activity).
                Intent myIntent = new Intent(MainActivity.this, Example5Activity.class);

                // Start Example5Activity.
                MainActivity.this.startActivity(myIntent);
            }
        });
    }
}

 

6- Example1Activity - Вызвать другой Activity

Далее откройте  activity_example1.xml мы смоделируем интерфейс для  Example1Activity
Настроить ограничения (constraint) для компонентов на интерфейсе.
Настроить  ID, Text для компонентов на интерфейсе:
activity_example1.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=".Example1Activity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="51dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="54dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:gravity="center"
        android:text="TextView"
        android:textSize="22sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="37dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:gravity="center"
        android:text="TextView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView1" />

    <Button
        android:id="@+id/button_clickMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"
        android:text="Click me"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <Button
        android:id="@+id/button_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="22dp"
        android:text="Back"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_clickMe" />
</androidx.constraintlayout.widget.ConstraintLayout>
Example1Activity.java
package org.o7planning.androidbasic2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class Example1Activity extends AppCompatActivity {

    private Button buttonClickMe;
    private Button buttonBack;
    private TextView textView1;
    private TextView textView2;

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

        // Find TextView by its ID
        this.textView1  = (TextView)this.findViewById(R.id.textView1);

        // Find TextView by its ID
        this.textView2 = (TextView)this.findViewById(R.id.textView2);

        this.buttonClickMe = (Button)this.findViewById(R.id.button_clickMe);

        this.buttonBack = (Button)this.findViewById(R.id.button_back);

        // Get the intent sent from MainActivity.
        Intent intent = getIntent();

        // Parameter in Intent, sent from MainActivity
        String value1 = intent.getStringExtra("text1");

        // Parameter in Intent, sent from MainActivity
        String value2 = intent.getStringExtra("text2");

        this.textView1.setText(value1);
        this.textView2.setText(value2);

        // When user click "Click me" button.
        this.buttonClickMe.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                textView2.setText("You click button");
            }
        });

        // When user long click "Click me" button.
        this.buttonClickMe.setOnLongClickListener(new Button.OnLongClickListener() {


            // return true if the callback consumed the long click, false otherwise.
            @Override
            public boolean onLongClick(View v) {
                textView2.setText("You long click button");
                return true;
            }
        });

        // When user click "Back" button.
        this.buttonBack.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                // Back to previous Activity.
                Example1Activity.this.finish();
            }
        });

    }
}
Запустить пример:

View more Tutorials: