ПредишенСледващото

Как да създадете потребителски layoutmanagers за Android

В неотдавнашна актуализация библиотеки подкрепят Android, нов компонент RecyclerView, който дойде на мястото на ListView и донесе много нови възможности. Тя е предназначена за създаване на големи и сложни списъци и ви позволява да използвате различни LayoutManagers. включително по поръчка.

На един проект, ние трябваше да се създаде един нетрадиционен поглед на списъка. Така че ние пише своите оформления Carousel LayoutManager и Разширете LayoutManager. Подробно описание може да се намери на GitHub.

В тази статия искам да говоря за основните принципи на създаване на потребителски LayoutManagers. Реализация собствени оформления изисква писане на много код. За да направим нещата по-лесно, ние ще споделим ключови моменти.

Писане на LayoutManager

Стандартните LayoutManagers включват:

  • LinearLayoutManger - класически списъци
  • GridLayoutManager - за табличен вид
  • StaggeredGridLayoutManager - за състава на елементи в стил Pinterest

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

Преди да създадете собствен LayoutManager, уверете се, че знаете какво принципи, за да го създадат.

Общи правила за създаване на потребителски оформления:

1. Draw само това, което се показва на екрана.

2. Използвайте бърз алгоритъм за изчисляване на позицията на елементите, а не тичам наоколо списъка с адаптер (RecyclerView.Adapter).

3. За пореден път не infleytit възгледи, които вече са на екрана, както и да ги използва повторно.

4. Да не се предизвиква requestLayout при всяка възможност. Вместо това, чрез преместване на макарата, когато е необходимо. Например, когато трябва да се направи анимация.

Когато сте научили основните правила за създаване на ваши собствени оформления, отидете на методите.

Методи за прилагане оформления:

  • onLayoutChildren - основен метод, където строителните елементи се извършва за показване
  • onMeasure - един много важен метод. Ако размерите на възгледи за деца в LayoutManager някак зависими от този параметър, важно е да се изчисти, да преизчисли размера си и отново да преброи всички мнението на детето с точните размери.
  • scrollToPosition (инт) - позволява ви да преминете целия оформлението на определена позиция в адаптер
  • smoothScrollToPosition (recyclerView, състояние, положение) - анимирана превъртане, която изисква от вас да се движите в списъка и въведете посоката на скоростта на анимацията
  • canScrollVertically / canScrollHorizontal - чудесен начин да заключите превъртане възможности в определени области
  • scrollVerticallyBy / scrollHorizontalBy - ви позволява да промените състоянието на LayoutManager. Използвайки този метод, трябва да proskrollit всичките му елементи и да се върнете няколко равен на броя на свитъците направени. Например, можете да се върнете 0, а след това ще бъде почти равносилно на забрана skorollinga в методите по-горе.
  • onSaveInstanceState / onRestoreInstanceState - помогна за спасяването на състоянието на обичай на LayoutManager, например, е необходима за преврати

В действителност, тези методи са отговорни за функциите, които изпълняват оформления. Например, нашият ExpandLayoutManager ви позволява да показвате допълнителна информация за всеки елемент в списъка. Той използва различни scrollBy, scrollHorizontallyBy за превъртане характеристики:

Нашата Carousel LayoutManager отново използва ScrollVerticallyBy и ScrollHorizontallyBy, за да превъртите през списъка с раздели на заявлението. Тя може да работи в цикъла, т.е. обръщане списък за неопределено време, а може би за определен праг. В допълнение, той поддържа scrollToPosition и smoothScrollToPosition да позволи незабавно преминаване към желания елемент от кода:

Ефектът от въртящите въртележка и мащабиране оформления даде архитектурни парчета като CarouselZoomPostLayoutListener. По-специално, това намалява слушателя и леко се измества всеки елемент на екрана, в зависимост от позицията си по отношение на някои математически алгоритъм.

Определя се основните принципи и техники на писане оформления, можете да преминете към архитектурата.

Работна архитектура подход към LayoutManagers

1. Организира LayoutManager състояние, така че по всяко време да се знае токът компенсира, подреждането на първия и последния елемент, техните размери, както и други важни характеристики на оформлението.

Така например, за това ExpandLayoutManager mScrollOffset, mDecoratredChildHeight, mExpandItemPosition, mExecutingAnimationData. С тези данни, ние винаги може да следите на това, което заявяваме LayoutManager. Необходимо е да бъде в състояние да го възстанови, ако onLayoutChildren, scrollVerticallyBy / scrollHorizontalBy и анимация подкрепа.

2. Премахване на ненужни амортисьори, преди да попълните необходимо. Това не означава, че трябва да се запазят всички гледни точки. Той е предназначен за премахване на само тези, които вече са видими.

3. Не се създават нови възгледи, ако те се добавят към LayoutManager. Преминете през него и да намерят амортисьор, който сега се изисква. Ако не бъде намерен такъв демпфер, да я създадете getViewForPosition, а след това отново да го връзвам на желаната позиция в оформлението използване bindViewToPosition.

Има такава функция, че съдържанието на адаптер може да се промени. Трябва време, за да хване този вид ситуация, а когато стоката е вече открит в списък дете vyushek, отново с призове bindViewToPosition него. В противен случай, може да загубите промени адаптер.

4. Друг метод state.didStructureChange се нарича, когато се премества, изтрити или добавя елементи от средата на списъка. Тя показва промените в оформлението.

Цялото оформление е насочена към реализиране на добавянето, измерване и местоположението на възгледите на детето в определен ред в реално време. Това означава, че ако потребителят превърта приложението на екрана със списък на секции, като зависи от LayoutManager когато могат да се добавят нови дъщерни амортисьори, а когато кожата и премахва старите. Ето защо, ако оформлението си има устойчива архитектура, вие гарантирате, че потребителят ще може без проблем да си взаимодействат с прилагането и на елементите на списък обичай.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!