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


Взаимодействие между Activity



В прошлых темах мы рассмотрели жизненный цикл activity и запуск новых activity с помощью объекта Intent. Теперь рассмотрим некоторые особенности взаимодействия между activity в одном приложении. Допустим, у нас есть три activity: MainActivity, SecondActivity и ThirdActivity.

С помощью Intent, например, по нажатию кнопки MainActivity запускает SecondActivity:

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

startActivity(intent);

На SecondActivity тоже есть кнопка, которая запускает ThirdActivity:

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

startActivity(intent);

На ThirdActivity также есть кнопка, которая возвращается к первой activity - MainActivity:

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

startActivity(intent);

Если мы последовательно запустим все activity: из главной MainActivity запустим SecondActivity, из SecondActivity - ThirdActivity, то в итоге у нас сложится следующий стек activity:

ThirdActivity
SecondActivity
MainActivity

Если после этого из ThirdActivity мы захотим обратиться к MainActivity, то метод startActivity() запустит новый объект MainActivity (а не вернется к уже существующему), и стек уже будет выглядеть следующим образом:

MainActivity
ThirdActivity
SecondActivity
MainActivity

То есть у нас будут две независимые копии MainActivity. Такое положение нежелательно, если мы просто хотим перейти к существующей. И этот момент надо учитывать. Если мы нажмем на кнопку Back (Назад), то мы сможем перейти к предыдущей activity в стеке.

Чтобы выйти из этой ситуации, мы можем использовать флаг Intent.FLAG_ACTIVITY_REORDER_TO_FRONT:

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

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

startActivity(intent);

В этом случае после перехода из ThirdActivity к MainActivity стек будет выглядеть следующим образом:

MainActivity
ThirdActivity
SecondActivity

Если же нам просто надо перейти из ThirdActivity к MainActivity, как если бы мы перешли назад с помощью кнопки Back, то мы можем использовать флаги Intent.FLAG_ACTIVITY_CLEAR_TOP и Intent.FLAG_ACTIVITY_SINGLE_TOP:

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

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

startActivity(intent);

В этом случае после перехода из ThirdActivity к MainActivity стек будет полностью очищен, и там останется одна MainActivity.

 

 

 


Ресурсы Color и установка цвета

В приложении Android также можно определять ресурсы цветов (Color). Они должны храниться в файле по пути res/values и также, как и ресурсы строк, заключены в тег < resources>. Так, по умолчанию при создании самого простого проекта в папку res/values добавляется файл colors.xml:

<? xml version=" 1.0" encoding=" utf-8"? >

< resources>

< color name=" colorPrimary" > #3F51B5< /color>

< color name=" colorPrimaryDark" > #303F9F< /color>

< color name=" colorAccent" > #FF4081< /color>

< /resources>

Цвет определяется с помощью элемента < color>. Его атрибут name устанавливает название цвета, которое будет использоваться в приложении, а шестнадцатеричное число - значение цвета.

Для задания цветовых ресурсов можно использовать следующие форматы:

  • #RGB (#F00 - 12-битное значение)
  • #ARGB (#8F00 - 12-битное значение с добавлением альфа-канала)
  • #RRGGBB (#FF00FF - 24-битное значение)
  • #AARRGGBB (#80FF00FF - 24-битное значение с добавлением альфа-канала)

Чтобы проще было ориентироваться в цветовых схемах и в том, какие цвета предпочтительнее использовать, на странице https: //material.io/guidelines/style/color.html# можно найти большой список из цветов, рекомендемых компанией Google.

Изменим файл colors.xml, добавив еще один цвет:

<? xml version=" 1.0" encoding=" utf-8"? >

< resources>

< color name=" colorPrimary" > #3F51B5< /color>

< color name=" colorPrimaryDark" > #303F9F< /color>

< color name=" colorAccent" > #FF4081< /color>

< color name=" textViewColor" > #EEEEEE< /color>

< /resources>

Применим цвета в файле activity_main.xml:

<? xml version=" 1.0" encoding=" utf-8"? >

< RelativeLayout xmlns: android=" http: //schemas.android.com/apk/res/android"

android: id=" @+id/activity_main"

android: layout_width=" match_parent"

android: layout_height=" match_parent"

android: paddingBottom=" @dimen/activity_vertical_margin"

android: paddingLeft=" @dimen/activity_horizontal_margin"

android: paddingRight=" @dimen/activity_horizontal_margin"

android: paddingTop=" @dimen/activity_vertical_margin" >

 

< TextView

   android: textSize=" 20dp"

   android: layout_width=" wrap_content"

   android: layout_height=" wrap_content"

       

   android: textColor=" @color/colorPrimary"

   android: background=" @color/textViewColor"

       

   android: text=" Hello Android Nougat! " />

   

< /RelativeLayout>

С помощью атрибута android: textColor устанавливается цвет текста в TextView, а атрибут android: background устанавливает фон TextView. В качестве значения они используют цвет, например, в том же шестнадцатеричном формате. Для получения самого цвета после " @color/" указывается имя ресурса.

Также можно использовать цветовые ресурсы в коде MainActivity:

package com.example.eugene.viewsapplication;

 

import android.support.v4.content.ContextCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.TextView;

 

public class MainActivity extends AppCompatActivity {

 

protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

 

   int textColor = ContextCompat.getColor(this, R.color.colorPrimary);

   int backgroundColor = ContextCompat.getColor(this, R.color.textViewColor);

 

   TextView textView = new TextView(this);

   textView.setText(" Hello Android Nougat! " );

   textView.setTextSize(20);

   textView.setPadding(16, 16, 16, 16);

 

   textView.setTextColor(textColor);

   textView.setBackgroundColor(backgroundColor);

 

   setContentView(textView);

}

}

Для получения цвета применяет метод ContextCompat.getColor(), который в качестве первого параметра принимает текущий объект Activity, а второй парамет - идентификатор цветового ресурса.




Работа с изображениями

Ресурсы изображений

Одним из наиболее распространенных источников ресурсов являются файлы изображений. Android поддерживает следующие форматы файлов: .png (предпочтителен), .jpg (приемлем), .gif (нежелателен). Для графических файлов в проекте уже по умолчанию создана папка res/drawable. При добавлении графических файлов в эту папку для каждого из них Android создает ресурс Drawable. После этого мы можем обратиться к ресурсу следующим образом в коде Java:

1 R.drawable.имя_файла

Или в коде xml:

1 @[имя_пакета: ]drawable/имя_файла

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

В качестве шаблона activity выберем Empty Activity:

После создания проекта скопируем в проект в папку res/drawable какой-нибудь файл изображения. Здесь разу стоит учитывать, что файл изображения будет добавляться в приложение, тем самым увеличивая его размер. Кроме того, большие изображения отрицательно влияют на производительность. Поэтому следует использовать небольшие и оптимизрованные (сжатые) графические файлы.

При копировании файла нам будет предложено установить для него новое имя.

Можно изменить название файла, а можно оставить так как есть.

Для работы с изображениями в Android можно использовать различные элементы, но непосредственно для вывода изображений предназначен ImageView. Поэтому изменим файл activity_main.xml следующим образом:

1 2 3 4 5 6 7 8 9 10 11 <? xml version=" 1.0" encoding=" utf-8"? > < RelativeLayout xmlns: android=" http: //schemas.android.com/apk/res/android" android: id=" @+id/activity_main" android: layout_width=" match_parent" android: layout_height=" match_parent" >   < ImageView android: layout_width=" wrap_content" android: layout_height=" wrap_content" android: src=" @drawable/dubi2" /> < /RelativeLayout>

В данном случае для отображения файла в ImageView у элемента устанавливается атрибут android: src. В его значении указывается имя графического ресурса, которое совпадает с именем файла без расширения. И после этого уже в Preview или в режиме дизайнере в Android Studio можно будет увидеть применение изображения, либо при запуске приложения:

Если бы мы создавали ImageView в коде java и из кода применяли бы ресурс, то activity могла бы выглядеть так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.example.eugene.imagesapp;   import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView;   public class MainActivity extends AppCompatActivity {   @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ImageView imageView = new ImageView(this); // применяем ресурс imageView.setImageResource(R.drawable.dubi2); //setContentView(R.layout.activity_main); setContentView(imageView); } }

 



ImageView

В прошлой теме было рассмотрено, как выводить изображения с помощью элемента ImageView. Теперь рассмотрим некоторые дополнительные моменты по работе с этим элементом.

Среди его функционала следует отметить возможность масштабирования изображения, которое задается с помощью перечисления < =" " span=" " >. Это перечисление определяет следующие значения:

  • CENTER: изображение центрируется по центру без масштабирования
  • CENTER_CROP: изображение центрируется по центру и масштабируется с сохранением аспектного отношения между шириной и высотой. Если какая-то часть не помещается в пределы экрана, то она обрезается
  • CENTER_INSIDE: изображение центрируется по центру и масштабируется с сохранением аспектного отношения между шириной и высотой, но ширина и высота не могут быть больше ширины и высоты ImageView
  • FIT_CENTER: изображение масштабируется и центрируется
  • FIT_START: изображение масштабируется и устанавливается в начало элемента (вверх при портретной оринетации и влево - при альбомной)
  • FIT_END: изображение масштабируется и устанавливается в конец элемента (вниз при портретной оринетации и вправо - при альбомной)
  • FIT_XY: изображение масштабируется без сохранения аспектного отношения межуд шириной и высотой, заполняя все пространство ImageView
  • MATRIX: изображение масштабируется с применением матрицы изображения

Для установки значния для этого поля в файле activity_main.xml можно использовать атрибут android: scaleType. Например, установка FIT_XY:

< ImageView

android: layout_width=" wrap_content"

android: layout_height=" wrap_content"

android: src=" @drawable/dubi2"

android: scaleType=" fitXY" />

В итоге мзображение растянется по вертикали и горизонтали:

Для создания аналогичного примера в коде java необходимо использовать метод setScaleType():

ImageView imageView = new ImageView(this);

imageView.setImageResource(R.drawable.dubi2);

imageView.setScaleType(ImageView.ScaleType.FIT_XY);

Аналогичный пример с android: scaleType=" center":


Поделиться:



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


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