Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Взаимодействие между 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 мы захотим обратиться к MainActivity, то метод startActivity() запустит новый объект 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 стек будет выглядеть следующим образом:
Если же нам просто надо перейти из 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 устанавливает название цвета, которое будет использоваться в приложении, а шестнадцатеричное число - значение цвета. Для задания цветовых ресурсов можно использовать следующие форматы:
Чтобы проще было ориентироваться в цветовых схемах и в том, какие цвета предпочтительнее использовать, на странице 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:
Или в коде xml:
Итак, для работы с изображениями создадим новый проект. Пусть он называется ImagesApp: В качестве шаблона activity выберем Empty Activity: После создания проекта скопируем в проект в папку res/drawable какой-нибудь файл изображения. Здесь разу стоит учитывать, что файл изображения будет добавляться в приложение, тем самым увеличивая его размер. Кроме того, большие изображения отрицательно влияют на производительность. Поэтому следует использовать небольшие и оптимизрованные (сжатые) графические файлы. При копировании файла нам будет предложено установить для него новое имя. Можно изменить название файла, а можно оставить так как есть. Для работы с изображениями в Android можно использовать различные элементы, но непосредственно для вывода изображений предназначен ImageView. Поэтому изменим файл activity_main.xml следующим образом:
В данном случае для отображения файла в ImageView у элемента устанавливается атрибут android: src. В его значении указывается имя графического ресурса, которое совпадает с именем файла без расширения. И после этого уже в Preview или в режиме дизайнере в Android Studio можно будет увидеть применение изображения, либо при запуске приложения: Если бы мы создавали ImageView в коде java и из кода применяли бы ресурс, то activity могла бы выглядеть так:
ImageView В прошлой теме было рассмотрено, как выводить изображения с помощью элемента ImageView. Теперь рассмотрим некоторые дополнительные моменты по работе с этим элементом. Среди его функционала следует отметить возможность масштабирования изображения, которое задается с помощью перечисления < =" " span=" " >. Это перечисление определяет следующие значения:
Для установки значния для этого поля в файле 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; Нарушение авторского права страницы