2

核心版本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?

4

1 回答 1

0

您有两种解决方案来创建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);
    }
}
于 2019-10-08T12:20:05.077 回答