Родни компоненти, руска документация за Android

Android предоставя сложен и мощен компонентен модел за изграждане на интерфейса на вашите приложения въз основа на основните класове за маркиране: View и ViewGroup. За бърз старт платформата включва стандартни компоненти, които са подкласове на View и ViewGroup - съответно джаджи и маркировка - които можете да използвате за създаване на потребителския интерфейс на вашите приложения.

Списъкът с приспособления включва бутони (Бутон), текстови полета (TextView), полета за въвеждане (EditText), списъци (ListView), квадратчета за отметка (CheckBox), радиобутони (RadioButton) и много други, в частност, специални джаджи AutoCompleteTextView. и TextSwitcher.

Сред компонентите за маркиране са LinearLayout, FrameLayout, RelativeLayout и други. За повече подробности вижте Markup.

Ако стандартните компоненти не могат да разрешат проблема ви, можете да създадете свои собствени подкласове View. Ако трябва само леко да промените характеристиките на съществуващите компоненти, можете просто да създадете подклас на съответния компонент и да замените неговите методи.

Изгледът за подкласиране ви дава фин контрол върху външния вид и функционалността на елемент. Ето няколко примера за компоненти, които можете да създадете:

  • Можете да създадете напълно персонализируем компонент за „контрол на силата на звука“, използвайки 2D графика, за да изглежда като аналогово електронно устройство.
  • Можете да поставите група визуални компоненти в нов компонент, може би чрез създаване на нещо като падащо меню, селектор с два панела (със списъци вляво и вдясно, чиито елементи могат да бъдат използвани повторно).
  • Можете да замените начина, по който компонентът EditText се показва на екрана (демонстрацията на Notepad използва приятен ефект за създаване на нарисувана страница).
  • Можете да заснемете всяко събитие, като натискане на клавиш или да извършвате действия по всякакъв начин (например в игри).

В следващия параграф ще разгледаме как да създадете персонализирани изгледи и да ги използвате във вашите приложения. За подробности вижте също Преглед на описанието на класа.

Основни неща

Ето описание на високо ниво за това, което трябва да направите, за да започнете да създавате свой собствен визуален компонент:

  1. Разширете съществуващ клас View или неговите подкласове.
  2. Заменете някои от методите на супер клас. Например методи, които започват с ‘on’: onDraw (), onMeasure (), onKeyDown (). Това е подобно на обработката на събития за активност, когато замените методите на жизнения цикъл.
  3. Използвайте новия си клас. След като създадете клас, можете да го използвате вместо компонента, на който се основава.

Забележка: разширените класове могат да бъдат декларирани като вътрешни класове в рамките на явленията и използвани от тях. Това е удобно, защото ви позволява да контролирате достъпа до компонента, но не е задължително (може да искате да създадете нов публичен клас за широко използване в приложението).

Пълна персонализация на компонентите

Пълната персонализация може да се използва за създаване на графични компоненти, които изглеждат точно както искате. Може би графичен VU метър, който прилича на аналог или песенна линия, в която топката се движи над думата, която трябва да пеете в караоке. Тоест във всякакви ситуации, при които съществуващите компоненти не могат да правят това, което искате.

За щастие можете лесно да създавате компоненти, чийто външен вид и поведение са ограничени само от вашето въображение, размера на екрана и наличната мощност на устройството (не забравяйте, че приложението може да работи на устройства с по-малка мощност от вашето).

За да създадете такъв компонент:

  1. Не е изненадващо, че най-общият клас, който можете да разширите, е View. Обикновено те започват с него, за да създадат своя нов суперкомпонент.
  2. Можете да създадете конструктор, който може да приема атрибути и параметри от XML, и можете да използвате свои собствени атрибути.
  3. Вероятно ще ви трябват ваши собствени слушатели на събития, достъп до свойства и модификатори на свойства и може би просто по-сложно поведение на компонентите.
  4. Почти със сигурност ще трябва да замените метода onMeasure () и вероятно onDraw (), за да създадете облика на компонента. Въпреки факта, че и двата метода имат стандартна реализация, onDraw () не прави нищо и onMeasure () винаги задава размера на 100x100 - това най-вероятно не е това, от което се нуждаете.
  5. Други методи на. може да бъде заменено, ако е необходимо.

Разширяване на методите onDraw () и onMeasure ()

Методът onDraw () ви предоставя платно, върху което можете да поставите каквото искате: 2D графика, други стандартни или персонализирани компоненти, текст и т.н.

Забележка: уви, тук не можете да прилагате 3D графика. Ако имате нужда от 3D, разширете класа SurfaceView вместо View и нарисувайте на отделна нишка. Вижте GLSurfaceViewActivity за пример.

Методът onMeasure () е малко по-сложен. Този метод е критичната точка между вашия компонент и контейнера, в който се намира. onMeasure () трябва да бъде заменен, за да се отчита ефективно и точно размерът на компонента. Това е малко по-трудно да се направи поради ограниченията, наложени от родителския компонент (който се предава на метода onMeasure ()) и поради изискванията за извикване на метода setMeasuredDimension (), преминавайки във височина и ширина веднага както са изчислени. Ако не сте извикали този метод от заменения метод onMeasure (), той ще изведе изключение.