Создайте экземпляр WindowInsetsCompat

Версия ядра: androidx.core:core:1.0.1

Есть ли способ создать WindowInsetsCompatэкземпляр?
Как я вижу, у него есть частный конструктор:

private WindowInsetsCompat(Object insets) {
    mInsets = insets;
}

Он вызывается из 5 методов и 1 статической оболочки, которая имеет видимость для пакета:

static WindowInsetsCompat wrap(Object insets) {
    return insets == null ? null : new WindowInsetsCompat(insets);
}

Который wrap метод используется только в 6 методах внутри ViewCompat, вот и все.

Итак, можем ли мы каким-то образом создать экземпляр WindowInsetsCompat?
Или единственный способ - это cmd+c/cmd+v?

1 ответ

У вас есть два решения для создания экземпляра WindowInsetsCompat.

Первое решение

Вы можете использовать отражение для вызова частного конструктора:

package com.example.myapplication;

import androidx.core.view.WindowInsetsCompat;

import java.lang.reflect.Constructor;

public class WindowInsetsCompatHelper {

    public static WindowInsetsCompat createWindowInsetsCompat(Object insets) {
        try {
            Constructor<WindowInsetsCompat> constructor = WindowInsetsCompat.class.getDeclaredConstructor(Object.class);
            constructor.setAccessible(true);
            return constructor.newInstance(insets);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

Второе решение

Требуется создать вспомогательный класс в пакете androidx.core.view. После этого вы можете напрямую использоватьwrap метод:

package androidx.core.view;

public class WindowInsetsCompatHelper {

    public static WindowInsetsCompat createWindowInsetsCompat(Object insets) {
        return WindowInsetsCompat.wrap(insets);
    }
}
Другие вопросы по тегам