Руководство Android для начинающих - Hello Android

1- Введение

Данная статья дает инструкцию программирования Android для начинающих. Использует инструмент  Android Studio. Удостоверьтесь, что вы установили Android Studio, если вы еще не установили, можете посмотреть по данной ссылке:

2- Запуск Android Studio

В первом запуске, Android Studio потребует вас ввести настройки версии Android Studio, которые вы устанавливали раньше. Вы можете выбрать  NO.
Выбрать понравившуюся вам  Theme:
При первом запуски, Android нужно скачать некоторые компоненты. Вам нужно подождать когда скачивание и установка завершатся.

3- Создать ваш первый Project

Для начала, вам нужно создать первый Project и успешно запустить его.
Ввести:
  • Application name: HelloAndroid
  • Company Domain: o7planning.org
  • Project location: F:\ANDROID_TUTORIAL\HelloAndroid
Это экран  Android Studio:
Ваш Project создан.

4- Запуск приложения

Симуляционный экран отображен на телефоне, и написано "Hello World".
Если при запуске приложения происходит ошибка (или окно симулированного устройства не открывается) или вы видите оповещение ниже, это значит вы еще не установили Intel Emulator Accelerator, вам нужно его установить:
Вам нужно установить Bạn cần phải cài đặt программное обеспечение для управления ускорения аппаратных средств  Intel:
Если вы видите слишком большой экран Android, вам может понадобиться некоторые конфигурации чтобы устранить это неудобство:

5- Изучение Nexus_5_23_x86

Вам нужно ознакомиться с симулятором телефона, на котором работает ваше приложение.
Slider ниже показывает что ваше приложение уже развернуто в телефоне:
  • Slider:

6- Обзор структуры Project Android

Это изображение вашего project на  Android Studio:
Файл или папка Описание
AndroidManifest.xml Это файл manifest описывающие фундаментальные характеристики приложения и определяет каждый его компонент.
java Данная папка содержит исходные файлы java для вашего проекта. По умолчанию, она включает исходный файл MainActivity.java класс activity запущенный при старте ваше приложения.
res/drawable Предыдущие версии Android используют эту папку для хранения изображений, настоящие версии используют вместо нее папку mipmap для хранения изображений. Эта папка почти уже не используется.
res/layout Эта папка содержит файлы определяющие интерфейс пользователя.
res/menu Эта папка содеаржит xml, определяющий menu который отображается на Action Bar.
res/mipmap Содержит изображения 'mipmap'.
res/values Это папка для разных файлов XML содержащия коллекцию ресурсов, как например строк (String) и определение цветов.

AndroidManifest.xml

Несмотря на то что, компоненты которые вы разрабатываете являются частью вашего приложения, вам нужно объявить все его компоненты в   AndroidManifest.xml. Данные файлы работают как интерфейс между операционной системой  Android и вашим приложением, поэтому если вы не объявите ваш компонент в этом файле, после он не будет рассматриваться операционной системой. Например, фалй  manifest по умолчанию будет похож на следующие файлы:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.o7planning.helloandroid" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

res/mipmap

Вам нужно понять больше про изображения в файле  mipmap, посмотрим избражения ниже, есть файл фото в папке  mipmap.
Одна из проблем, которая мне иногда встречается при использовании приложения  Andorid это я вижу размытые изображения, растянутые или неточные. Решениями это проблемы являются создание папки  mipmap для каждой плотности (density) изображения, которую  Android поддерживает, и чтобы изображения уменьшались точно. Есть 6 разных диапазона плотности (измеряется по пикселю на 1 дюйм) который поддерживает Android:
  1. ldpi: Для экранов с низким разрешением, примерно 120dpi
  2. mdpi: Для экранов с средним разрешением (на традиционном HVGA) ; примерно 160dpi
  3. hdpi: Для экранов с высоким разрешением, примерно 240dpi
  4. xhdpi: Для экранов с разрешением еще выше, примерно 320dpi. Добавлен в API Level 8
  5. nodpi: Может быть использован для ресурса bitmap который вы не хотите уменьшать в соответствии с плотностью экрана
  6. tvdpi: Некоторые экраны имеют разрешение где-то между mdpi и hdpi; примерно 213dpi. Они не считаются главной группой "разрешения". В основном используется для телевизоров и большинство приложений не нуждаются в mdpi и hdpi, система сама расстянет соответствующе. Данный стандарт представлен в API Level 13.

7- Жизненный цикл Android Activity

Firstly, what is Activity?
Activity это  Java код поддерживающий экран или интерфейс пользователя. То есть, создает блок интерфейса пользователя это Activity.
Activity это готовый класс в Android и все приложения в нем, включая интерфейс пользователя, должны наследовать его чтобы создать окно.
Например класс  MainActivity это расширенный  Activity из готового  Activity в библиотеке  Android. Изображение ниже иллюстрирует жизненный цикл  Activity.
Жизненный цикл  Activity описывает процессы  Activity со старта запуска (Launched), до отключения приложения. Включая процессы паузы, перезагрузки (resume)... Activity.
Чтобы легче было понять, вы можете изменить код класса  MainActivity, переопределить методы  onStart(), onResume(),... добавить оповещения (message) показывающие что этот метод запущен. Потом перезапустить приложение и наблюдать как работают процессы жизненного цикла Activity.
MainActivity.java
package org.o7planning.helloandroid;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

  public static final String TAG ="MyMessage";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      // Print Log
      Log.i(TAG,"onCreate");
  }

  @Override
  protected void onStop() {
      super.onStop();
      // Print Log
      Log.i(TAG,"onStop");
  }

  @Override
  protected void onDestroy() {
      super.onDestroy();
      // Print Log
      Log.i(TAG,"onDestroy");
  }

  @Override
  protected void onPause() {
      super.onPause();
      // Print Log
      Log.i(TAG,"onPause");
  }

  @Override
  protected void onResume() {
      super.onResume();
      // Print Log
      Log.i(TAG,"onResume");      }

  @Override
  protected void onStart() {
      super.onStart();
       // Print Log
       Log.i(TAG,"onStart");
  }

  @Override
  protected void onRestart() {
      super.onRestart();
      // Print Log
      Log.i(TAG,"onRestart");      }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);

      // Print Log
      Log.i(TAG, "onCreateOptionsMenu");
      return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
      // Print Log
      Log.i(TAG, "onOptionsItemSelected");

      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      int id = item.getItemId();

      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
          return true;
      }

      return super.onOptionsItemSelected(item);
  }
}
Перезапустите ваше приложение, и вы видите message записаны в окне logcat.
Вам нужно настроить фильтр чтобы  logcat отображал только ваши  message.
Ввести:
  • Filter Name: My Filter
  • Log Tag (regex): MyMessage
Теперь окно  logcat отображает только ваши  message.
Экран вашего телефона:

8- Как работает приложение Android 

Вы успешно запустили певое приложение  Android, и теперь мы пересмотрим как работал  Android с момента вызова приложения.
Вам нужно знать, то что вы видите в окне Project это не все компоненты участвующие в создании вашего приложения. Есть компоненты созданные автоматически компилятором. И они не отображаются в окне Project. Например, на основании структуры исходных файлов вашего project компилятор создает исходный файл  R.java, этот файл определяет константы для ресурсов в project.
Чтобы посмотреть файл  R.java на  Android Studio, откройте класс  MainActivity, нажмите на правую кнопку мыши на  R.layout.main_activity выберите  Go To/Implementation(s)
Константы определенные в классе R.java созданы в соответствии с ресурсами в Project:
Поэтому где-то в Project, вы можете использовать константы для ссылки на ресурсы в project. Например  R.layout.activity_main это константа ссылающаяся на файл  activity_main.xml в папке  res/layout.

Принцип реботы:

9- Что создает интерфейс пользователя?

Возможно сейчас вы думете  activity_main.xml это файл создающий интерфейс пользователя. Это правильно на 50%, на самом деле  activity_main.xml это файл определяющий объекты участвующие в интерфейсе приложения, и как они расположены на экране. Activity прочитает этот файл и нарисует на интерфейсе приложения. Поэтому интерфейс приложения в принципе создан с помощью  Activity.
Это код  Activity читающий файл  main_activity.xml для создания интерфейса.
MainActivity.java
package org.o7planning.helloandroid;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

   public static final String TAG ="MyMessage";

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

       // Read activity_main.xml to draw user interface.
       setContentView(R.layout.activity_main);
   }
   
   // .....
}  
Activity возможно не нужно читать файл xml, чтобы создать интерфейс приложения:
MainActivity.java
package org.o7planning.helloandroid;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

   public static final String TAG ="MyMessage";

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

       // Layout
       RelativeLayout layout = new RelativeLayout(this);
       layout.setBackgroundColor(Color.GREEN);

       // Create Button
       Button button = new Button(this);
       button.setText("My Button");

       // Add button to Layout.
       layout.addView(button);

       // Set content
       setContentView(layout);
   }

   // ......
}
И перезапустить приложение:
Android Studio настоящей версии не поддерживает вас в дизайне интуитивного интерфейса на Java.  Но он очень хорошо поддерживает вас в дизайне интуитивного интерфейса на файле  xml. Android Studio создаст для вас  XML. На самом деле, дизайн интерфейса на XML упростит ваше приложение.
Назад к  activity_main.xml, вы можете легко сделать дизайн интерфейса приложения:

10- Инструкция программирования Android (Следующая часть)

  • TODO Link!