在Android API-21下,Activity的convertToTranslucent方法无效?

时间:2016-07-24 02:27:42

标签: android

我想动态更改Activity的背景为透明。

在API-21之上,convertToTranslucent方法很有用。

但它在API-21下面无效。

这是我的主叫代码:

public static void convertActivityToTranslucentBeforeL(Activity activity) {
    try {
        Class<?>[] classes = Activity.class.getDeclaredClasses();
        Class<?> translucentConversionListenerClazz = null;
        for (Class clazz : classes) {
            if (clazz.getSimpleName().contains("TranslucentConversionListener")) {
                translucentConversionListenerClazz = clazz;
            }
        }
        Method method = Activity.class.getDeclaredMethod("convertToTranslucent",
                translucentConversionListenerClazz);
        method.setAccessible(true);
        method.invoke(activity, new Object[] {
                null
        });
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

活动的convertToTranslucent方法

public void convertToTranslucent(TranslucentConversionListener callback) {
    try {
        mTranslucentCallback = callback;
        mChangeCanvasToTranslucent =
                ActivityManagerNative.getDefault().convertToTranslucent(mToken);
    } catch (RemoteException e) {
        // pass
    }
}

我发现调用后mChangeCanvasToTranslucent的值为false

1 个答案:

答案 0 :(得分:0)

看起来你正在使用一些内部Android功能,这在以前的版本中是不存在的。你永远不应该使用内部功能。 一个简单的解决方法是将您的活动设置为始终半透明,并将您的布局背景设置为实体。然后动态更改布局背景不透明度。