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

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
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

TextView

Button (Кнопка)

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

CheckBox (Флажок)

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

CheckedTextView

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

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

SeekBar (Ползунок)

QuickContactBadge

RatingBar (Рейтинг)

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

Space

Text

EditText

Layouts

ConstraintLayout

GridLayout

FrameLayout

LinearLayout (Horizontal) и LinearLayout (Vertical)

RelativeLayout

TableLayout и TableRow

О разметках

Containers

ListView

TabHost и TabWidget

WebView

Images

ImageButton

ImageView

VideoView

Date

TimePicker

DatePicker

CalendarView

Chronometer

TextClock

Transitions

ImageSwitcher

TextSwitcher

ViewFlipper

Advanced

<include>

ViewStub

TextureView

NumberPicker

Google

Design

CoordinatorLayout

TabLayout

FloatingActionButton

TextInputLayout

TextInputEditText (вручную)

AppCompat

CardView (Карточка)

Toolbar

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

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

ZoomControls

Gallery (устар.)

CustomView


Eclipse

Form Widgets

ListPopupWindow

AutoCompleteTextView, MultiAutoCompleteTextView

Layouts

Fragment

DrawerLayout

SlidingPanelLayout

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

Composite

ExpandableListView

GridView

ScrollView и HorizontalScrollView

SearchView

SlidingDrawer

Date & Time

AnalogClock

DigitalClock

Transitions

StackView (Закрытая зона/3-й курс)

ViewAnimator (Закрытая зона/3-й курс)

ViewSwitcher

Advanced

requestFocus

View

GestureOverlayView (Закрытая зона/3-й курс)

SurfaceView

MediaController

Custom & Library Views

ProgressTextView

GradientTextView

VerticalTextView

QuickClearEditText (Закрытая зона/4-й курс)

SingleTouchView (Закрытая зона/4-й курс)

DoubleTouchView (Закрытая зона/4-й курс)

MultiTouchView (Закрытая зона/4-й курс)

ShapeDrawableView - добавляем и удаляем фигуры (Закрытая зона/4-й курс)

TouchImageView (Закрытая зона/4-й курс)

WebImageView (Закрытая зона/4-й курс)

RotateView (Закрытая зона/4-й курс)

Compaund Control. Создание контейнера из готовых элементов (Закрытая зона/4-й курс)

Градусник (Закрытая зона/5-й курс)

CircleView с анимацией (Закрытая зона/5-й курс)

FillingUpCircleView (Закрытая зона/5-й курс)

Шахматная доска (Закрытая зона/6-й курс)

Числовая сетка (Закрытая зона/6-й курс)

Счётчик для ворон (Закрытая зона/9-й курс)

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

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

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

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

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

Реклама