Android studio как сделать прозрачную кнопку
Перейти к содержимому

Android studio как сделать прозрачную кнопку

  • автор:

Полупрозрачная панель для ImageView

Для экономии места, когда требуется для ImageView сделать сопровождающий текст, можно наложить текст поверх ImageView, при этом сам TextView сделать полупрозрачным. Здесь нам поможет разметка RelativeLayout, позволяющая наложить два компонента друг на друга:

Как видно на скриншоте, текст лёг поверх картинки, немного захватив задние лапки и пушистый хвост.

А как поступить с более сложным случаем, когда нам нужно использовать два TextView поверх ImageView. В этом случае поместим текстовые метки в разметку LinearLayout, которую свою очередь сделаем полупрозрачной и поместим её уже поверх ImageView, как это делали в первом примере.

Данный приём можно использовать не только для отдельных ImageView, но и для адаптеров к GridView, когда у каждой ячейки сеточной компоновки требуется разместить ImageView и подпись к нему.

прозрачная кнопка

Почему в Эклипсе на Graphical Layout кнопка прозрачная, а на эмуляторе и телефоне нет. как сделать ее прозрачной?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Прозрачная кнопка с каемкой
Долго искал, но так и не нашел: как сделать прозрачную кнопку с прямо угольной формой с.

Прозрачная кнопка, именно прозрачная
Доброго времени суток, можно ли сделать прозрачную, именно прозрачную кнопку что бы только было.

Прозрачная кнопка
Как сделать фон кнопки прозрачным? Пробовал так : button.setBackground(new Color(255,255,255,0)); .

Прозрачная кнопка
Как сделать кнопку прозрачно поверх картинки? Добавлено через 20 минут Также нужно и PictureBox.

1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462

Добавлено через 26 секунд
background=»@android:color/transparent»

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Прозрачная Кнопка
Уважаемые программисты помогите пожалуйста решить задачу, возможно подобная тема есть на форуме но.

Прозрачная кнопка
Всем привет! Как сделать невидимую кнопку в C#, но активной, и вообще возможно ли это?

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

Прозрачная «кнопка» произвольной формы в UserForm
Здравствуйте. Возникла необходимость создания прозрачной "кнопки" произвольной формы ( вогнутые.

Тайны кнопок в Android. Часть 1: Основы верстки

В своем цикле статей по разработке Android-приложений я хочу поделиться с вами интересными и полезными приемами верстки сложных элементов управления. Мы рассмотрим как базовые приемы верстки, так и продвинутые способы ее оптимизации, которые существенно облегчают развитие и сопровождение Android-приложений, экономят время и деньги.

Первая часть предназначена для начинающих разработчиков. Я покажу, как сделать достаточно сложную кнопку исключительно версткой, не применяя Java-кода, ни тем более собственных компонентов. Знание этих приемов верстки пригодится и при работе с другими компонентами Android. По ходу статьи я буду подробно пояснять, что означают те или иные константы, атрибуты, команды и тому подобное. Но я также буду давать ссылки на официальную документацию Google, где вы можете подробно изучить каждую тему. Данная статья обзорная, я не ставлю цели привести здесь всю документацию, переведенную на русский язык. Поэтому я рекомендую изучать официальные источники, в частности те статьи, ссылки на которые я привожу здесь.

Что мы хотим сделать в данной статье? Допустим, мы делаем приложение, позволяющее включать/выключать функцию телефонии на смартфоне, в приложении будет кнопка “вкл/выкл”. Мы создадим кнопку с нашим собственным фоном и рамкой со скругленными углами. Фон и рамка будут меняться, когда кнопка получает фокус или становится нажатой. У кнопки будет текстовое название и иконка, поясняющая назначение кнопки визуально. Цвет текста и иконки также будет меняться при нажатии. Что еще? Так как кнопки “вкл./выкл.” встречаются в приложениях довольно часто, в Android уже есть готовый функционал для хранения/изменения состояния. Мы будем использовать его вместо того, чтобы изобретать собственный велосипед. Но отображение этого состояния мы сделаем свое, чтобы оно подходило нам по стилю.

Выглядеть это будет примерно так:

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

Делать все это будем только версткой. Почему верстка, а не код? Правильно сверстанная страница может легко стилизоваться, то есть ее можно менять практически до неузнаваемости простой заменой стиля. Можно даже предлагать пользователю выбирать тот стиль, который ему больше по душе. Стили в Android — это аналог каскадных таблиц CSS в HTML.

Решения, выполненные версткой, обычно компактнее аналогичных решений, выполненных кодом, при этом меньше шансов допустить ошибку. И большинство сверстанных без применения кода страниц можно просматривать и отлаживать в режиме дизайн (то есть прямо в IDE), для этого не нужно запускать приложение, ожидать деплоя и т.п.

Создаем каркас приложения

Приступим к реализации. Для демонстрации я буду использовать Android Developer Tools (ADT), построенный на Eclipse.
Создадим новый проект. File->New->Android Application Project.
Application Name: MysteriesOfButtonsPart1
Project Name: MysteriesOfButtonsPart1
Package Name: com.mysteriesofbuttons.part1
Остальные параметры оставим по умолчанию:

Next. На следующей странице для экономии времени позволим ADT создать для нас тестовую Activity:

Next. Иконки оставим по умолчанию, в данном случае речь не о них.
Next. Создаем пустую Activity, то есть опять же все по умолчанию:

Next. Имя Activity оставляем без измений:

Finish. Наконец-то можем перейти к делу.

Простейшая кнопка

Начнем с кода Layout. Откроем файл /res/layout/activity_main.xml и заменим все его содержимое следующим кодом:

RelativeLayout — макет, в котором дочерние элементы размещаются относительно друг друга, например, расположить кнопку слева от другой кнопки и т.п. Подробнее о работе RelativeLayout можно почитать здесь.

Button — наша кнопка. Мы задаем ей атрибут android:id , по которому сможем идентифицировать ее в приложении. Формат @+id/ означает, что в ресурсах должен быть создан новый идентификатор. Если бы мы указали @id/ , то это бы означало, что в ресурсах указанный идентификатор уже должен быть.

А вот так мы задаем отображаемый пользователю текст: android:text=»Телефония»

Забегая вперед, скажу, что весь текст, который видит пользователь, должен храниться не в коде макетов страниц и не в Java-коде, а в ресурсах strings.xml , чтобы приложение могло поддерживать более одного языка, но об этом подробнее в следующей части. Пока что мы укажем текст прямо в макете, чтобы улучшить наглядность примера.

Как RelativeLayout , так и Button имеют атрибуты android:layout_width и android:layout_height . Это обязательные атрибуты любого View . Как следует из названия, они обозначают соответственно ширину и высоту элементов. Их можно задавать в различных единицах, но мы не используем конкретные размеры, как вы могли заметить. Мы используем константы match_parent и wrap_content .

match_parent означает, что элемент должен полностью заполнить своего родителя по горизонтали либо по вертикали, в зависимости от того, задаем ли мы ширину или высоту.

wrap_content означает, что размер элемента должен быть минимальным, но таким, чтобы все содержимое элемента в него поместилось.

Есть еще константа fill_parent , которая означает ровно то же самое, что и match_parent . Зачем использовать две одинаковых константы? fill_parent был введен до версии API 8, а с восьмой версии является устаревшим и не рекомендуется к использованию. Дело в том, что для англоязычных разработчиков match_parent точнее отражает смысл константы, чем fill_parent .

Я стараюсь использовать эти константы match_parent и wrap_content везде, где только возможно, всячески избегая указания фиксированных размеров, так как приложения Android работают на устройствах с сильно отличающимися размерами экранов.

Теперь, когда с основой окна разобрались, давайте перейдем к коду нашей Activity MainActivity.java :

package com.mysteriesofbuttons.part1; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); >> 

В этом коде мы видим только одну имеющую смысл команду: setContentView(R.layout.activity_main);
Этот метод устанавливает ресурс макета страницы, с которым будет работать Activity.

Давайте запустим наше приложение и посмотрим, что получилось:

А теперь откроем в Eclipse файл activity_main.xml и нажмем кнопку Graphical Layout :

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

Стили текста

Теперь займемся выравниванием. Сейчас текст на кнопке выровнен по центру. Это стиль по умолчанию для кнопки. Но нам нужно выровнять текст по левому краю, сохранив выравнивание по центру по вертикали. Как это сделать? Добавим к кнопке атрибут android:gravity :

Этот атрибут может принимать одно или два значения, в нашем случае два. Значения разделяются вертикальной чертой |
Как это выглядит:

О различных вариантах выравнивания и о том, что они означают, можно подробно почитать здесь

Попробуйте “поиграть” с этими вариантами и посмотреть, как это влияет на внешний вид кнопки. Если хотите сделать текст на кнопке жирным и/или курсивом, воспользуйтесь параметром android:textStyle , например android:textStyle=»bold|italic» . Если нужно изменить размер текста на кнопке, подойдет параметр android:textSize , например: android:textSize=»24sp» .

sp — Scale-independent Pixels — единица измерения, основанная на плотности экрана и на настройках размера шрифта. Чтобы текст выглядел одинаково хорошо на разных экранах, рекомендуется задавать его размер именно в sp .

Зададим эти параметры нашей кнопке:

Я предпочитаю оставлять стили ближе к значениям по умолчанию, так как они тщательно подбирались высоко оплачиваемыми дизайнерами, и с моим чувством вкуса я очень сомневаюсь, что смогу сделать лучше. Данный пример призван показать читателю как можно больше возможностей, и не претендует на звание произведения искусства, поэтому прошу не пинать за то, что раньше оно выглядело лучше.

Помещаем иконку на кнопку

Идем дальше. Теперь нам нужно добавить иконку на кнопку. Иконка задается следующим файлом icon_phone_normal.png :
кликните, чтобы скачать

Импортируем его в ресурсы приложения в каталог drawable-hdpi . Чтобы задать иконку кнопке, добавим ей атрибут android:drawableLeft :

Кроме android:drawableLeft , есть еще несколько атрибутов, которые позволяют задавать иконки, размещая их в других частях кнопки: android:drawableTop , android:drawableBottom , android:drawableRight , android:drawableStart , android:drawableEnd .

Как вы заметили, мы указали путь к иконке без расширения PNG , а также без суффикса -hdpi . Это не опечатка. Расширение никогда не указывается, так как в имени идентификатора не может быть точки. А суффикс -hdpi будет подставлен Android автоматически, так как это единственный каталог drawable , в котором есть иконка icon_phone_normal . Если бы иконка была не только в каталоге drawable-hdpi , но и в drawable-mdpi , к примеру, то Android выбрал бы наиболее полходящую для разрешения экрана того устройства, на котором запущено приложение. Так вы можете поставлять качественные продукты, одинаково хорошо выглядящие на устройствах с разным размером и плотностью экрана. О поддержке разных экранов у Google есть очень хорошая статья.

Собственный фон для кнопки

Теперь, когда мы разобрались с drawable-ресурсами, давайте заменим фон нашей кнопки на тот, который нам нужен. Для этого мы будем использовать такую картинку button_normal.png :
кликните, чтобы скачать

Импортируйте ее в drawable-hdpi . На картинке мы видим черные полоски вдоль каждой из границ экрана. Они служат для того, чтобы Android правильно растягивал картинку под нужный нам размер. Левая и верхняя линии показывают, какая область картинки будет растягиваться по вертикали и горизонтали соответственно. А правая и нижняя линии показывают, в какую область растянутой картинки нужно вписывать содержимое элемента, если у него есть дочерние элементы. При этом сами черные линии конечно же не видны на результирующей картинке.

Это называется nine-patch drawable, об этой технике верстки подробно можно почитать здесь

Чтобы ресурс считался 9-patch, в его имени перед расширением должна присутствовать девятка, отделенная от остального имени еще одной точкой, как у нас: button_normal.9.png

Как назначить элементу такой растягиваемый фон? Откроем текст нашей кнопки и добавим ей атрибут android:background :

Выглядит не очень красиво, так как кнопка “прижалась” к сторонам экрана вплотную. Это случилось потому, что в фоне по умолчанию, который мы сменили на наш собственный, рамка кнопки была нарисована с отступом, и этот отступ мы видели на предыдущих скриншотах. Мы также можем перерисовать фон кнопки, но можем задать отступ и другим способом, и хорошо бы сразу для всех элементов окна, чтобы не дублировать код для каждого. Для этого подойдет атрибут android:padding у тега RelativeLayout :

Что такое dp ? Density-independent pixel — мера, которая будет автоматически масштабироваться на устройствах с разной плотностью пикселей экрана так, чтобы элемент выглядел одинаково. Всегда используйте dp , а не px , когда необходимо задать конкретный размер, иначе приложение будет выглядеть хорошо только на вашем телефоне.

Атрибут android:padding задает одинаковые отступы со всех сторон. Если мы хотим задать разные отступы с каждой стороны отдельно, можем использовать атрибуты android:paddingLeft , android:paddingRight , android:paddingTop , android:paddingBottom , android:paddingStart и android:paddingEnd .

Рассмотренные нами до сих пор атрибуты есть не только у кнопки, но и у других элементов. Например, android:background есть у всех видимых элементов, android:drawableLeft — у TextEdit и так далее.

Идем дальше. Если запустить наше приложение, мы увидим, что при щелчке на кнопку ее внешний вид никак не меняется, то есть визуально не видно, нажата кнопка или нет. В таком виде оставлять нашу кнопку нельзя, так как пользователь не сможет понять, работает приложение, или нет.

Работаем с состояниями в Android

Здесь нам на помощь приходят состояния. Когда с кнопкой ничего не происходит, она находится в не нажатом состоянии. Если на кнопке находится фокус ввода, она переходит в состояние state_focused . Если нажать на кнопку пальцем, она будет находиться в состоянии state_pressed , пока мы не отпустим палец. Как это нам поможет? Мы можем задавать внешний вид элементов для каждого состояния отдельно. Дальше мы детально рассмотрим, как это делается. Обратите внимание, что состояние можно использовать для отрисовки всего, что видно пользователю: иконки, картинки, отдельные цвета и т.п.

Начнем с фона. Зададим для нашей кнопки красную рамку, когда она в фокусе, и рамку с инвертированными цветами, когда она нажата. Для этого импортируйте в каталог drawable-hdpi следующие изображения:
кликните, чтобы скачать
кликните, чтобы скачать

Теперь у нас есть 3 картинки фона на 3 состояния. Но атрибут android:background можно задать только один раз. Чтобы выйти из ситуации, мы создадим новый drawable-ресурс selector , объединяющий наши 3 картинки.

Щелкнем правой кнопкой мыши на каталоге drawable-hdpi , выберем New->Android XML File. Введем название файла button_background и выберем корневой элемент selector :

Finish.
Мы получили заготовку следующего содержания:

Добавим в селектор картинки для состояния state_focused и state_pressed :

Обратите внимание, что для картинки button_normal состояние не указывается. Это означает, что такая картинка будет использована всегда, если кнопка не в состоянии state_focused или state_pressed . Кроме рассмотренных состояний можно использовать еще несколько, полный перечень описан здесь

Как работает селектор? Когда селектор назначен какому-то элементу, он постоянно получает состояние элемента-хозяина, и возвращает ему первый из перечисленных ресурсов, который соответствует состоянию владельца.

Откроем текст нашего макета activity_main.xml и заменим фон кнопки на button_background :

Также затемним фон всего окна, чтобы лучше видеть белую рамку нажатой кнопки:

Теперь, если запустить приложение на эмуляторе, и нажать кнопку, мы увидим, что она меняет свой фон:

Изменяем иконку при нажатии

Уже неплохо, но можно и лучше. Давайте повторим процесс создания селектора для смены иконки телефона в нажатом состоянии. Импортируйте в drawable-hdpi иконку icon_phone_pressed.png :
кликните, чтобы скачать

Создайте селектор icon_phone со следующим текстом:

И в тексте кнопки замените drawableLeft на наш новый селектор icon_phone :

Изменяем цвет текста при нажатии

Теперь иконка меняется при нажатии на кнопку так же, как и фон. Осталось разобраться с цветом текста. Он пока что остается черным в любом состоянии. Если бы в нажатом виде текст тоже становился белым, как рамка и иконка, кнопка выглядела бы куда интереснее.

Управление цветом несколько отличается от картинок. Пойдем по порядку. Во-первых, цвета хранятся в отдельном каталоге, который мы должны создать. Добавим подкаталог color в каталоге res , на одном уровне с каталогом drawable-hdpi :

Далее в каталоге color создадим Android XML File с именем text_color и корневым элементом selector :

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

По аналогии с картинками, здесь задаются цвета для состояния state_pressed и состояния по умолчанию. Цвета здесь задаются двумя способами: android:color=»@android:color/white» и android:color=»#484848″

В первом случае мы используем заранее созданный цвет в пространстве имен android . Во втором — указываем RGB-значение цвета в шестнадцатиричной системе исчисления. В данном случае мы задали цвет по умолчанию такой же, как цвет рамки в ненажатом виде.

Теперь вернемся к исходнику нашей кнопки и пропишем цвет текста android:textColor=»@color/text_color» :

Теперь мы не можем видеть результат в Graphical Layout, это известная проблема плагина, которую, я надеюсь, Google когда-нибудь починит. К сожалению, тестировать цвета с состоянием можно только на эмуляторе или реальном устройстве.

На этом художественная часть верстки завершена. Сейчас кнопка выглядит так:

Прикручиваем ToggleButton

Далее поговорим о том, как отображать состояние телефонии на кнопке (вкл/выкл). Мы помним, что у кнопки иконка может быть не только слева. Для отображения текущего состояния мы добавим кнопке иконку справа. Пусть это будет галочка для состояния Вкл и крестик для состояния Выкл. Как мы будем менять иконки? Самый очевидный вариант — это определить обработчик события OnClickListener и поочередно менять иконку drawableRight . Вполне рабочий вариант. Но что делать, если на странице не одна, а 10 кнопок, и вообще кнопка может быть не только на этой странице. Тогда наш путь приведет к дублированию кода, который будет копипастом кочевать из одной Activity в другую, не самое красивое решение. Да и если нужно будет что-то изменить, менять придется во многих местах. Хотелось бы этого избежать.

К счастью, Android предоставляет для этих целей специальный компонент — ToggleButton . Эта кнопка может находиться в двух состояниях: включено и выключено. Заменим в нашем макете тег Button на ToggleButton :

Так как ToggleButton наследуется от Button , к ней применимы все атрибуты Button , но есть нюанс. ToggleButton игнорирует атрибут text , зато вводит два новых: textOn и textOff . Они задают текст для включенного и выключенного состояний соответственно. Но мы хотим отображать состояние картинкой, а текст хотим оставить как есть. Поэтому пропишем наш текст обоим атрибутам, а атрибут text уберем за ненадобностью:

Теперь подготовим картинки для отображения состояния кнопки. Импортируйте в drawable-hdpi ресурсы icon_on_normal.png , icon_on_pressed.png , icon_off_normal.png и icon_off_pressed.png (представлены в порядке перечисления):
кликните, чтобы скачать
кликните, чтобы скачать
кликните, чтобы скачать
кликните, чтобы скачать
Внимание: белые иконки на прозрачном фоне не очень здорово видны в браузере на белом фоне.

Зачем четыре иконки? Вспомним, что мы хотим отображать все элементы кнопки белыми, когда пользователь удерживает кнопку нажатой. Поэтому для каждого состояния Вкл и Выкл мы должны дать по две иконки: в нажатом и отпущенном состоянии. Итого четыре.

Создадим новый drawable селектор с именем icon_on_off :

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

android:state_checked=»true» соответствует кнопке в режиме Вкл, а android:state_checked=»false» — кнопке в режиме Выкл.

Теперь вернемся к нашей кнопке и добавим ей атрибут android:drawableRight=»@drawable/icon_on_off» . Для наглядности я добавил его сразу после android:drawableLeft :

Что у нас получится, если запустить приложение? Мы видим кнопку ненажатую, в режиме Выключено. При этом если ее нажать и держать, все элементы отображаются белым на сером фоне:

Отпускаем кнопку, состояние меняется на Включено. Если нажать еще раз, снова увидим серый фон и белые иконки, после чего состояние опять будет Выключено:

Именно то, что нам нужно.

Немного кода

На всякий случай давайте посмотрим, как можно в коде нашего приложения понять, включена кнопка или выключена. Для этого мы можем анализировать значение isChecked() кнопки: true — включена, false — выключена. Добавим атрибут android:onClick=»onToggleButtonClick» к нашей кнопке:

В MainActivity.java добавим соответствующий метод:

package com.mysteriesofbuttons.part1; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast; import android.widget.ToggleButton; public class MainActivity extends Activity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); >public void onToggleButtonClick(View button) < Toast.makeText( getApplicationContext(), Boolean.toString(((ToggleButton) button).isChecked()), Toast.LENGTH_SHORT).show(); >> 

Запустив приложение и нажав кнопку, мы увидим внизу экрана текстовые подсказки true / false . А это значит, что все работает.

Заключение

Как видите, возможности верстки в Android весьма обширны: в данной статье весь функционал, кроме подсказок, реализован только версткой. Но это далеко не все.

В данной статье код XML намеренно оставлен неидеальным. Изучение базовых возможностей верстки и продвинутая оптимизация — это две разные темы. Конечно, настоящие гуру должны сразу писать оптимально. Но данная статья преследует учебные цели и рассчитана на начинающих разработчиков, поэтому я решил усложнять постепенно.

  • использование строковых ресурсов strings.xml
  • собственные стили styles.xml и наследование стилей
  • темы
  • ресурсы размерностей dimens.xml
Полезные ссылки
  • Готовый проект Android-приложения из данной статьи
  • Тайны кнопок в Android. Часть 2: Рефакторинг верстки
  • Верстка RelativeLayout
  • Верстка Nine patch drawable
  • Выравнивание текста в Button’ах и EditText’ах
  • Поддержка экранов разных размеров и плотности
  • Состояния, которые можно использовать в селекторе
  • iPUMB — ПУМБ online — пример приложения, в котором я использовал описанные приемы верстки

Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

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

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

Как правило, каждый экран в вашем приложении для Android связан с одним классом Java или Kotlin, известным как Activity. Этот термин можно перевести как активность или деятельность, но мы будем использовать термин активити, без перевода. Единственный экран с отображенным «Hello World» создается с помощью активити MainActivity.kt. Это активити было создано средой разработки, когда вы создали свой новый проект. Каждое видимое активити в приложении для Android имеет макет, который определяет пользовательский интерфейс для активити. Android Studio имеет редактор макетов, в котором вы можете создавать и определять макеты.

Макеты описаны в XML. Редактор макета позволяет вам определять и изменять макет либо путем кодирования XML, либо с помощью интерактивного визуального редактора. Вы можете переключаться между редактированием макета в XML и в редакторе визуального дизайна и создавать макеты любым способом.

1 . Редактор макета в Android Studio

Каждый элемент в макете представляет собой view, или представление. В этой задаче изучим интерфейс редактора макетов в Android Studio и разберемся, как изменять значения свойств для view.

Что вы узнаете

  • Как использовать редактор макетов.
  • Как установить значения свойств.
  • Как добавить строковые ресурсы.
  • Как добавить цветовые ресурсы.

Откройте редактор макета

  1. Найдите и откройте папку, в которой хранятся все макеты res/layout.
    Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  2. Дважды щелкните файл разметки макета экрана activity_main.xml.Панель справа, называемая редактором макетов , отображает содержимое этого файла.
  3. В нижней части панели обратите внимание на две вкладки: « Дизайн и текст» . Откройте вкладку «Текст».XML-код, определяющий макет, отображается на вкладке «Текст». Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  4. Откройте вкладку «Дизайн», чтобы отобразить визуальный редактор макета. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  5. В правом верхнем углу редактора макета вы видите кнопки + и для увеличения и уменьшения масштаба. Используйте эти кнопки для настройки вида или нажмите кнопку Zoom to Fit Screen (справа от кнопок масштабирования), чтобы обе панели соответствовали вашему экрану. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android StudioНа этом скриншоте макет дизайна слева показывает, как ваше приложение появляется на устройстве. Схема чертежа , показанная справа, представляет собой схематический вид макета.
  6. Используйте значки компоновки в левом верхнем углу панели инструментов дизайна, чтобы отобразить проектный вид, вид чертежа или оба вида вместе.
  7. Используйте значок ориентации, чтобы изменить ориентацию макета. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  8. Используйте меню выбора устройства, чтобы увидеть, как будет выглядеть макет на разных андроид-устройствах. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

Изучите и измените размер дерева компонентов

  1. Посмотрите на дерево компонентов в левом нижнем углу вкладки «Дизайн».
    Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android StudioНа этой панели отображается иерархия представлений view в вашем макете.
  2. Отрегулируйте стороны панелей так, чтобы вы могли видеть все в Дереве компонентов.
    Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  3. Щелкните значок «Закрыть панель» в правом верхнем углу дерева компонентов.Панель Component Tree закрывается.
  4. Верните панель Component Tree, щелкнув по вертикальной метке «Дерево компонентов» слева.Теперь, когда вы знаете, как изменять размер, закрывать и открывать панель Component Tree, пришло время изучить иерархии представлений view.

Исследуйте иерархии представлений view

  1. В дереве компонентов обратите внимание, что корень иерархии представлений view представляет собой компонент разметки ConstraintLayout.Каждый макет должен иметь корневой view, содержащий все остальные view. Корневой view всегда представляет собой группу представлений ViewGroup, которая представляет собой view, которое содержит другие view. ConstraintLayout – один из примеров группы представлений ViewGroup. Его название содержит слово constraint – ограничения, и это отражает суть взаимодействия элементов, добавляемых в этот корневой view. Познакомится с другими корневыми элементами разметки, такими как RelativeLayout, LinearLayout и другими можно по ссылкам в описании видео. /linearlayout-i-relativelayout-osobennosti-maketov-ekranov-android/

Далее в этом уроке мы рассмотрим работу с ConstraintLayout более подробно.

Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

  1. Обратите внимание, что ConstraintLayout содержит TextView.
  2. Просмотрите XML-код для макета, щелкнув вкладку « Текст » в нижней части вкладки «Дизайн».
  3. В коде XML обратите внимание, что корневой элемент . Корневой элемент содержит один элемент.

Изменение значений свойств

  1. На вкладке «Текст» изучите свойства элемента TextView.Пока что не беспокойтесь о каких-либо инструментах и свойствах макета – мы рассмотрим их позже.
  1. Измените значение свойства text в кавычках на любое.
  2. Вернитесь на вкладку «Дизайн».
  3. Выберите TextView в дереве компонентов .
    Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  1. Посмотрите на панель «Свойства» справа.
    Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

Устранение неполадок этого шага :

  • Если панель «Свойства» не отображается, щелкните вертикальную метку « Свойства» в правом верхнем углу.
  • Если панель свойств отличается от отображаемой, щелкните значок « Просмотреть все свойства»,чтобы переключить представление. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  1. В текстовом поле TextView на панели «Свойства» снова измените значение текста и нажмите « Ввод»,чтобы завершить выбор Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  2. Вернитесь на вкладку «Текст», чтобы убедиться, что текст был изменен в XML. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  3. Запустите приложение, чтобы увидеть изменение. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

Изменение свойств отображения текста

  1. На вкладке «Дизайн» разверните поле textAppearance для TextView. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  2. Измените некоторые свойства текста. Например, измените семейство шрифтов, увеличьте размер текста и выберите жирный стиль. (Возможно, вам потребуется прокрутить панель, чтобы увидеть все поля.)
  3. Измените цвет текста. Щелкните в поле textColor и введите букву g. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android StudioПоявится меню с возможными значениями завершения. Этот список содержит предварительно определенные цвета. Позже разберемся, как быстро определить свои собственные цвета.
  4. Выберите @android:color/darker_gray и нажмите Enter . Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  5. На вкладке «Текст» просмотрите XML для TextView. Вы видите, что новые свойства были добавлены. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

Если вы видите ошибку “Hardcoded string should use @string resource,” не беспокойтесь, вы скоро узнаете, как исправить это.

Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

  1. Запустите приложение еще раз.

Показать все свойства

  1. Вернитесь на вкладку «Дизайн». В правом верхнем углу панели «Свойства» щелкните значок « Просмотреть все свойства» . Если вы не видите никаких свойств, убедитесь, что TextView все еще выбран в дереве компонентов. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android StudioПанель «Свойства» обновляется, чтобы показать все свойства TextView. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  2. Прокрутите список, чтобы получить представление о свойствах, которые вы можете установить для TextView.

2. Добавление строковых и цветовых ресурсов

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

Что вы узнаете

  • Как извлечь значения свойств в ресурсы.
  • Как определяются ресурсы.
  • Добавление и использование цветовых ресурсов.
  • Результаты изменения высоты и ширины макета.

Извлечение ресурсов

  1. На панели «Проект» слева откройте в папке res /values файл строковых ресурсов strings.xml . Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android StudioФайл strings.xml открывается в редакторе. Не беспокойтесь, если увидите уведомление о редактировании переводов.Этот файл содержит элемент , который, в свою очередь, содержит один элемент , определяющий имя приложения.
  2. Вернитесь к файлу макета activity_main.xml. Убедитесь, что вы находитесь на вкладке «Текст». Обратите внимание, что свойство text выделено. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  3. Нажмите выделенный код. Слева появляется лампочка. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  4. Нажмите лампочку. В появившемся меню выберите « Извлечь строковый ресурс» . Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  5. В появившемся диалоговом окне имя ресурса отражает текущее значение строки. Измените имя ресурса на hello_world_text и нажмите « ОК» . Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  6. На вкладке «Текст» обратите внимание, что значение свойства android:text изменилось на @string/hello_world_text. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  7. Перейдите обратно в файл strings.xml. Обратите внимание, что появился новый строковый ресурс hello_world_text.Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  8. В файле strings.xml измените значение ресурса строки hello_world_text на Hello Universe (или на текст по вашему выбору).
  9. Вернитесь к activity_main.xml. Вы видите, что значение свойства text остается @string/hello_world_text .
  10. Запустите приложение, чтобы убедиться, что текст отображается так, как вы написали.

Теперь вы знаете, как создавать новые строковые ресурсы, извлекая их из существующих значений полей. Вы также можете добавить новые ресурсы в файл strings.xml вручную.

Добавить цветовые ресурсы

Теперь разберемся, как добавлять новые цветовые ресурсы.

Изменение цвета текста и фона TextView

  1. На панели «Проект» слева в папке res/values откройте файл цветовых ресурсов colors.xml. файл цветовых ресурсовФайл colors.xml открывается в редакторе. В нем определено три цвета. Это основные цветовые ресурсы для оформления приложения в стиле материального дизайна. Более подробно о принципах материального дизайна смотрите по ссылке. /urok-1-kak-obnovlyat-vashi-prilozheniya-do-osobennostej-material-design/
  2. Вернитесь к Activity_main.xml на вкладке «Текст», чтобы вы могли увидеть XML-код макета.
  3. Добавьте новое свойство в TextView под названием android: background и начните печатать значение @color .Появится меню, предлагающее предопределенные цветовые ресурсы: предопределенные цветовые ресурсы
  4. Выберите цвет @ colorPrimaryDark.
  5. Измените свойство android: textColor и дайте ему значение @android:color/white .Android Studio определяет диапазон цветов, включая белый, поэтому вам не нужно самостоятельно определять белый цвет.
  6. Вернитесь на вкладку «Дизайн» в Activity_main.xml. Скройте панель «Свойства», если она загромождает ваше представление view.Вы видите, что TextView теперь имеет темно-синий фон, а текст отображается белым цветом. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio

Добавить новый цвет для использования в качестве цвета фона экрана

  1. Вернитесь в colors.xml, добавьте новый цветовой ресурс:

Этот цвет желтый.

Background

  1. Вернитесь на вкладку «Дизайн» в Activity_main.xml. В дереве компонентов выберите ConstraintLayout.
  2. На панели «Свойства» отобразите все свойства. Выберите свойство Background и нажмите Enter . Введите «c» в появившемся поле.
  3. В появившемся меню выберите цвет @color/screenBackground . Нажмите « Enter», чтобы завершить выбор.
  4. Дважды щелкните желтый значок слева от значения цвета в поле Background. Откроется страница «Цвета» в редакторе ресурсов, в которой отображается список цветов, определенных в вашем проекте, а также цвета, определенные платформой Android. Он также предлагает интерактивный выбор цвета.
  5. Не стесняйтесь изменять значение цвета screenBackground , но убедитесь, что окончательный цвет заметно отличается от colorPrimary и colorPrimaryDark.

Исследуйте свойства ширины и высоты

Теперь, когда у вас есть новый цвет фона экрана, вы будете использовать его для изучения эффектов изменения свойств ширины и высоты view.

  1. Перейдите на вкладку «Дизайн» для Activity_main.xml. В дереве компонентов выберите ConstraintLayout.
  2. На панели «Свойства» отображается минимизированный вид свойств. Переключитесь на значок « Просмотреть все свойства», если нужно. Значения Layout_width и layout_height установлены в match_parent . ConstraintLayout является корневым представлением, поэтому размер «родительского» макета фактически является размером экрана на устройстве. ConstraintLayout будет иметь ту же ширину и высоту, что и экран.

Совет. Все представления должны иметь свойства layout_width и layout_height .

  1. На вкладке «Дизайн» обратите внимание, что весь фон экрана использует цвет экрана . весь фон экрана использует цвет экрана
  2. Теперь выберите TextView и измените ширину и высоту на match_parent .TextView заполняет весь экран, потому что его ширина и высота такие же, как и ConstraintLayout, который, в свою очередь, заполняет весь экран. Урок 3. Ресурсы и макеты экрана приложения, ConstraintLayout в Android Studio
  3. Посмотрите, что произойдет, если ширина match_parent, а высота – wrap_content и наоборот.
  4. Установите как ширину, так и высоту TextView обратно в wrap_content .

3. Добавим views и constraints (ограничения)

пользовательский интерфейс

В этой задаче вы добавите три кнопки в свой пользовательский интерфейс, как показано здесь.

Что вы узнаете

  • Как добавить новые view в макет.
  • Как ограничить позицию представления другим view.

Просмотр свойств ограничений

  1. На вкладке «Текст» просмотрите свойства ограничения для TextView. свойства ограничения для TextViewЭти свойства определяют положение TextView. Прочтите их внимательно.Вы можете ограничить верхнюю, нижнюю, левую и правую стороны сверху, снизу, слева и справа от других view. В этом случае единственное другое view – это корневой ConstraintLayout, который является родительским элементом этого TextView.
  2. На вкладке «Дизайн» выберите TextView в дереве компонентов и посмотрите на Inspector Constraint в верхней части панели «Свойства». Inspector Constraint Каждая из синих точек представляет собой constrain – ограничение. Каждая из синих точек представляет собой constrain - ограничение
  3. Обратите внимание, что в представлении чертежа также показаны ограничения при выборе определенного view. Переместите курсор над представлением проекта, и он также отобразит ограничения. в представлении чертежа также показаны ограничения

Добавьте кнопки и ограничьте их позиции

Чтобы узнать, как использовать ограничения для подключения view друг к другу, добавьте три кнопки в макет.

  1. Обратите внимание на палитру в левом верхнем углу редактора компоновки. Переместите стороны так, чтобы вы могли видеть многие элементы в палитре. палитру в левом верхнем углу редактора компоновки
  2. Прокрутите перечисленные элементы, чтобы получить представление о том, что доступно.
  3. Выберите кнопку , которая находится рядом с верхней частью, и перетащите ее на макет проекта, поместив ее под TextView. Выберите кнопку

Обратите внимание, что кнопка добавлена ​​в дерево компонентов под ConstraintLayout.

Добавьте ограничение на кнопку

Теперь вы ограничиваете верхнюю часть кнопки до нижней части TextView.

  1. Переместите курсор по кругу в середине верхней части кнопки. Добавьте ограничение на кнопку
  2. Перетяните круг в верхней части кнопки на круг в нижней части TextView. Перетяните круг в верхней части кнопки на круг в нижней части TextViewКнопка перемещается вверх, чтобы разместиться чуть ниже TextView. Верхняя часть кнопки теперь ограничена нижней частью TextView.
  1. Взгляните на инспектора ограничений на панели «Свойства». Он показывает одно ограничение для кнопки.
  2. На вкладке «Текст» ознакомьтесь с кодом XML для кнопки. Он включает атрибут, который ограничивает верхнюю часть кнопки до нижней части TextView, а также имеет верхний отступ, который был добавлен автоматически. ограничивает верхнюю часть кнопки до нижней части TextVi

Добавьте вторую кнопку

  1. Добавьте еще одну кнопку в макет и поместите ее куда угодно. (Не беспокойтесь, если она улетит куда-нибудь в макете)
  2. Играйте с позициями и ограничениями двух кнопок. Попробуйте добавить и удалить ограничения.

Чтобы удалить ограничение:

переместите курсор по кругу для ограничения

  • В представлении «Дизайн» переместите курсор по кругу для ограничения, пока круг не станет красным, а затем щелкните по нему.
  • Или на панели «Свойства» переместите курсор по кругу для ограничения, пока он не покажет x, а затем щелкните по нему.

Если вы удалили ограничение и хотите его вернуть, отмените действие или создайте новое ограничение.

правая часть правой кнопки ограничена правой стороной экрана

  1. Когда разберетесь, как добавлять и удалять ограничения, добавьте ограничения, чтобы разместить кнопки в их конечной позиции. Левая кнопка должна находиться слева, а правая кнопка – справа на экране. Вертикально обе кнопки отображаются между TextView и нижней частью экрана (см. Рисунок ниже).Сделайте это, добавив ограничения на две кнопки, чтобы соблюдались условия:
  • верхняя часть каждой кнопки ограничена нижней стороной TextView.
  • нижняя часть каждой кнопки ограничена нижней стороной экрана.
  • левая часть левой кнопки ограничена левой стороной экрана.
  • правая часть правой кнопки ограничена правой стороной экрана.

Добавьте третью кнопку

Добавьте третью кнопку между двумя существующими кнопками.

  1. Добавьте третью кнопку.
  2. Сдвиньте левую и правую стороны новой кнопки на соседние кнопки.
  3. Ограничьте верхнюю и нижнюю части новой кнопки так же, как существующие кнопки. Другими словами, верхняя часть новой кнопки ограничена нижней стороной TextView. Низ ограничен нижней стороной экрана.
  4. Изучите XML-код на вкладке «Текст». У каждой из кнопок есть атрибут:app:layout_constraintVertical_bias
    Ограничения «смещения» позволяют сместить положение view на большее значение, чем на другой стороне, когда обе стороны ограничены в противоположных направлениях . Например, если верхняя и нижняя стороны view ограничены по верху и низу экрана, вы можете использовать вертикальное смещение, чтобы поместить view ближе к верхней, чем к нижней части экрана.
  5. Код XML для новой кнопки, скорее всего, появится ниже кода двух других кнопок в файле XML. Переместите код для новой кнопки, чтобы он находился между двумя другими кнопками, таким образом порядок кнопок в файле XML отражает порядок, который они отображают в дизайне. Это изменение не влияет на функциональность или внешний вид макета, но это поможет вам сопоставить представления на вкладке «Текст» с представлениями на вкладке «Дизайн».

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

Подготовьте пользовательский интерфейс для следующей задачи

Следующая задача – заставить кнопки выполнить какое-то действие при нажатии. Прежде чем научиться настраивать интерактивные кнопки, завершите подготовку пользовательского интерфейса.

  1. Измените текст TextView, чтобы показать 0 (ноль).
  2. Измените текст и id кнопки. Вы можете отредактировать XML-код на вкладке «Текст» или задать значения свойств на панели «Свойства» в редакторе проекта. Установите текст и, id как показано ниже:

При необходимости исправить ошибки

Если вы отредактировали XML для макета, код XML для средней кнопки, которая теперь является кнопкой Count , показывает некоторые ошибки. Также макет испорчен на вкладке «Дизайн».
Ошибки возникают из-за того, что кнопки слева и справа изменили их id.

  1. Если у вас есть эти ошибки, исправьте их, обновив id кнопки в ограничениях, подчеркнутых красным.
app:layout_constraintRight_toLeftOf="@+id/toast_button" app:layout_constraintLeft_toRightOf="@+id/random_button"

Обновите внешний вид кнопок и TextView

Макет вашего приложения теперь в основном завершен, но его внешний вид можно улучшить несколькими небольшими изменениями.

Добавить новые цветовые ресурсы

  1. В файле colors.xml измените значение screenBackground на #2196F3, что является синим оттенком в палитре Material Design .
  2. Добавьте новый цвет с именем «buttonBackground». Используйте значение #BBDEFB, которое является более светлым оттенком в синей палитре.
#BBDEFB

Добавить цвет фона для кнопок

  1. В макете добавьте цвет фона для каждой из кнопок. (Вы можете отредактировать XML или использовать панель «Свойства», в зависимости от того, что вы предпочитаете.)
android:background="@color/buttonBackground"

Изменение полей левой и правой кнопок

  1. Дайте левой кнопке левый край 24dp и дайте правой кнопке правый край 24dp.
android:layout_marginLeft="24dp"android:layout_marginRight="24dp"

Обновите внешний вид TextView

  1. Удалите фоновый цвет TextView, либо очистив значение на панели «Свойства», либо удалив атрибут android:background из кода XML.После этого, фон представления станет прозрачным.
  2. Увеличьте размер текста TextView до 72sp.
android:textSize="72sp"
  1. Измените семейство шрифтов TextView на sans-serif .
  2. Добавьте свойство app:layout_constraintVertical_bias в TextView, чтобы он был более равномерно распределен по вертикали на экране. Не стесняйтесь настраивать значение этого ограничения по своему усмотрению. (Зайдите на вкладку «Дизайн», чтобы посмотреть, как выглядит макет).
app:layout_constraintVertical_bias="0.3"

Единицы измерения dp и sp – это специальные относительные единицы, которые используются для размеров экранных компонентов и текста в Android Studio. Благодаря их использованию экранные элементы выглядят примерно одинаково на экранах разных размеров.

Совет . Использование атрибута смещения вместо полей или отступов приводит к более удобному расположению на разных размерах экрана и ориентациях.

  • Если представление ограничено другими видами как на верхнем, так и на нижнем краях, используйте вертикальное смещение, чтобы настроить его вертикальное положение.
  • Если представление ограничено как на его левом, так и на правом краях, используйте горизонтальное смещение, чтобы настроить его горизонтальное положение.

Запустите приложение

Если вы внесете все обновления, ваше приложение будет выглядеть следующим образом. Если вы использовали разные цвета и шрифты, ваше приложение будет выглядеть несколько иначе.

Вы добавили кнопки на главный экран вашего приложения, но в настоящее время кнопки не реагируют на нажатия. Мы исправим это в следующем уроке. Исходные коды макетов и ссылка на проект в архиве

До встречи на следующем уроке, всем добра.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *