Сайт разработчика Александра Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Palette

На панели Palette находятся компоненты пользовательского интерфейса: View, Layouts, ViewGroup.

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

В сети можно встретить разные способы наименования на русском - контрол, вьюха, представление и т.д. Мы с вами будем использовать термин компонент. А знаете почему? Берём крайние буквы слова, отсчитываем по три следующих символа и выкидываем их на свалку. Что остаётся? Ну вы поняли - компонент. Красиво спрятались.

Кстати, в последних версиях Android Studio в режиме Design появилась панель Component Tree, хотя раньше в Eclipse аналогичная вкладка называлась Outline. Видимо, разработчики из Гугла читали эту статью и внесли поправки.

Стандартные элементы имеют привычные свойства: ширина, высота, цвет и т.п. Есть еще пара важных свойств, которые могут влиять на размер и положение дочерних элементов - важность (weight) и выравнивание (gravity).

Weight используется для присвоения элементу показателя важности (веса), отличающего его от других элементов, находящихся в контейнере. Предположим, в контейнере находятся три элемента управления: первый имеет важность 1, а два других имеют значение 0. В этом случае элемент управления, который имеет значение важности 1, займет в контейнере все свободное пространство. Можно представить как приготовление коктейля: 2 части молока, 1 часть настойки валерианы. В сумме это даёт три части. Применительно к кнопкам - первая кнопка займёт 2/3 части экрана, а вторая кнопка займёт оставшуюся 1/3 часть экрана.

Также можно использовать атрибут android:weightSum, чтобы переопределить расчёт веса. Например, установить сумму в значение 1 и у дочерних элементов использовать значения от 0.0 до 1.0.


android:weightSum="1"
android:layout_weight="0.5"

Другие настройки могут сбить с толку других программистов, поэтому не изощряйтесь в остроумии.

Выравнивание (gravity) - это ориентация в контейнере (alignment). Например, вы хотите выровнять текст надписи по правому краю, тогда свойство gravity будет иметь значение right. Набор значений для gravity достаточно ограничен: left, center, right, top, bottom, center_vertiсаl, сliр_horizontal и еще некоторые.

Обратите внимание, что в Android есть два сходных атрибута выравнивания: android: gravity и android: layout_gravity. Разница заключается в том, что android: gravity - это настройка, используемая компонентом, а android: layout_gravity применяется контейнером. Например, можно установить для android: gravity значение center, чтобы текст в EditText был выровнен по центру. Аналогичным образом можно выровнять EditText по правому краю LinearLayout (который является контейнером), установив android: layout_gravity="right".

У компонентов также есть атрибут android:tag, который можно использовать для хранения каких-то промежуточных данных. Также можно устанавливать теги программно. Напишем надуманный пример:


String someString = "Мурзик";
infoTextView.setTag(R.id.button, someString);
String buttonName = (String) infoTextView.getTag(R.id.button);
infoTextView.setText(buttonName);

Наложение двух компонентов

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


android:layout_marginBottom="-4dp"

Идентификаторы

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

Widgets

Button (Кнопка)

ToggleButton (Кнопка-переключатель)

CheckBox (Флажок)

RadioButton (Переключатель)

CheckedTextView

Spinner (Выпадающий список)

ProgressBar, ProgressBar (Horizontal) - индикаторы прогресса

SeekBar (Ползунок)

QuickContactBadge

RatingBar (Рейтинг)

Switch (Переключатель с текстом)

Space

Text

TextView

EditText (Plain Text, Password, E-mail и т.д.)

AutoCompleteTextView, MultiAutoCompleteTextView

Layouts

ConstraintLayout

GridLayout

FrameLayout

LinearLayout (Horizontal) и LinearLayout (Vertical)

RelativeLayout

TableLayout и TableRow

<fragment>

О разметках

Containers

RadioGroup

ListView

GridView

ExpandableListView

ScrollView и HorizontalScrollView

TabHost и TabWidget

WebView

SearchView

ViewPager

Images

ImageButton

ImageView

VideoView

Date

TimePicker

DatePicker

CalendarView

Chronometer

TextClock

Transitions

ImageSwitcher

AdapterViewFlipper

StackView

TextSwitcher

ViewAnimator

ViewFlipper

ViewSwitcher

Advanced

<include>

requestFocus

<view>

ViewStub

TextureView

SurfaceView

NumberPicker

Google

adView

MapView

Design

CoordinatorLayout

AppBarLayout

TabLayout

TabItem

NestedScrollView

FloatingActionButton

TextInputLayout

TextInputEditText (вручную)

AppCompat

Другие компоненты

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

DrawerLayout

ZoomControls

ListPopupWindow

SwipeRefreshLayout

GestureOverlayView

Устаревшие компоненты

Раньше на сайте были описания устаревших компонентов. Я решил их удалить, чтобы не мозолили глаза. В их число попали Gallery, AnalogClock, DigitalClock.


Eclipse

Layouts

SlidingPanelLayout

BlinkLayout (недокументированный)

Composite

SlidingDrawer

MediaController

Дополнительное чтение

Получить размеры компонентов при запуске приложения (Закрытая зона/4-й курс)

Собственный фон для элементов

Программное добавление и удаление виджета

Создаём собственное пространство имён (Закрытая зона/5-й курс)

Реклама