Размеры элемента в переменных

Расширение size_provider записывает ширину и высоту элемента в переменные после расчета его размеров.

Важно

Предпочтительный способ получить размеры элемента — свойство layout_provider. Оно принимает те же параметры и не требует подключения расширения. На Android и iOS обработчик расширения size_provider помечен как устаревший.

Пример
{
  "type": "container",
  "items": [
    {
      "type": "text",
      "text": "Hello!",
      "width": {
        "type": "wrap_content"
      },
      "extensions": [
        {
          "id": "size_provider",
          "params": {
            "width_variable_name": "title_width"
          }
        }
      ]
    },
    {
      "type": "separator",
      "width": {
        "type": "fixed",
        "value": "@{title_width}"
      }
    }
  ]
}

В этом примере ширина разделителя равна ширине текста. Целочисленная переменная title_width должна быть объявлена в карточке.

Параметры

Параметры

Описание

id

Идентификатор расширения.

width_variable_name

Имя переменной, в которую записывается ширина элемента в dp. Необязательный параметр.

height_variable_name

Имя переменной, в которую записывается высота элемента в dp. Необязательный параметр.

Задайте хотя бы один из параметров. Переменные должны быть объявлены с типом integer.

Подключение

build.gradle

dependencies {
    implementation "com.yandex.div:div-size-provider:${versions.divkit}"
}

В коде:

val divConfiguration = DivConfiguration.Builder(imageLoader)
    .extension(DivSizeProviderExtensionHandler())
    .build()

Обработчик SizeProviderExtensionHandler доступен только при импорте модуля с атрибутом @_spi(Legacy):

@_spi(Legacy) import DivKitExtensions

DivKitComponents(
  ...
  extensionHandlers: [
    SizeProviderExtensionHandler(variablesStorage: variablesStorage)
  ]
)
import { SizeProvider } from '@divkitframework/divkit/client';

const map = new Map();

map.set('size_provider', SizeProvider);

render({
    id: 'test',
    target: element,
    json: {},
    extensions: map
});

Узнать больше

Вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: https://t.me/divkit_community_ru.

Репозиторий DivKit