Освой Android играючи

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

Шкодим

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

Palette

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

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

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

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

Стандартные элементы имеют привычные свойства: ширина, высота, цвет и т.п.

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

Выравнивание (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"

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

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

Tooltip (Подсказка)

В Android 8.0 (API 26) у View появилась возможность присвоить компоненту подсказку, которая появляется при долгом нажатии или при прохождении курсора мыши (бывает и такое).

Подсказку можно установить через XML-атрибут.


<Button
    android:id="@+id/button"
    android:text="Нажми на меня"
    android:tooltipText="Tooltips" />

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


// Kotlin
// установить подсказку
button.tooltipText = "Подсказка"

// получить текст подсказки
Log.i("Tooltip", button.tooltipText.toString()) 

v.3.4-3.1

В версии студии 3.1 снова поменяли названия разделов для компонентов. Думаю, вы разберётесь.

В версии 3.2 добавили ChipGroup, Chip, BottomAppBar. В версии 4.1 появился новый раздел Helpers. В версии 4.2 список компонентов снова изменился.

Common

TextView

Button

ImageView

RecyclerView

FragmentContainerView

<fragment> (убрали)

ScrollView

Switch

Text

TextView

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

AutoCompleteTextView, MultiAutoCompleteTextView

CheckedTextView

TextInputLayout

Buttons

Button

ImageButton

ChipGroup и Chip

CheckBox

RadioGroup/RadioButton

ToggleButton

Switch

FloatingActionButton

Widgets

View

ImageView

WebView

VideoView

CalendarView

Text Clock

ProgressBar

ProgressBar (Horizontal)

SeekBar, SeakBar (Discrete)

RatingBar

SearchView

TextureView

SurfaceView

Horizontal Divider

Vertical Divider

Layouts

ConstraintLayout

LinearLayout (horizontal) и LinearLayout (vertical)

FrameLayout

TableLayout и TableRow

Space

Containers

Spinner

RecyclerView

ScrollView, HorizontalScrollView

NestedScrollView

ViewPager2

CardView

AppBarLayout

BottomAppBar

NavigationView

BottomNavigationView

Toolbar

MaterialToolbar

TabLayout

TabItem

ViewStub

<include>

FragmentContainerView

<fragment> (убрали)

NavHostFragment

<view>

requestFocus

Helpers

Group

Barrier (Horizontal)/Barrier (Vertical)

Flow

Guideline (horizontal)

Guideline (vertical)

Layer

ImageFilterView

ImageFilterButton

MockView

Google

AdView

MapView

Legacy

GridLayout

ListView

TabHost

RelativeLayout

GridView

В разных версиях студии были и другие компоненты.

Widgets

QuickContactBadge

Layouts

О разметках

Containers

ExpandableListView

ViewPager

Date

TimePicker

DatePicker

Chronometer

Transitions

ImageSwitcher

AdapterViewFlipper

StackView

TextSwitcher

ViewAnimator

ViewFlipper

ViewSwitcher

Advanced

NumberPicker

Design

CoordinatorLayout

TextInputEditText (вручную)

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

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

ZoomControls

ListPopupWindow

SwipeRefreshLayout

GestureOverlayView

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

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

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

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

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

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

Реклама