Создайте экземпляр 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);
}
}