При добавлении view в windowmanager появлялся пустой белый экран

#android #android-view #android-windowmanager

#Android #android-просмотр #android-windowmanager

Вопрос:

Я создаю простой экран блокировки с использованием addview в windowmanager, хотя я успешно добавил вид экрана блокировки, но перед добавлением вида перед отображением вида добавляется белая раздражающая страница. я попытался установить для фона view другой цвет, но это ни на что не повлияло, поэтому я думаю, что это может быть что-то связанное с видом окна, после изменения цвета фона в activity, отложенный addview, он все еще появлялся.

ps: при удалении view, когда я вызывал before finish (), появлялся белый вид, но при удалении view в ondestroyed это немного задерживается, но белый вид не появляется.

Как я могу удалить / скрыть этот белый вид при добавлении VIEW / removeView?

 public static synchronized LockUtil getInstance(Activity act) {
    if (mLockLayer == null) {
        mLockLayer = new LockUtil(act);
    }
    return mLockLayer;
}

private LockUtil(Activity act) {
    mActivty = act;
    init();
}

private void init() {
    isLocked = false;
    if (null == mWindowManager) {
        mWindowManager = ((WindowManager) mActivty.getSystemService(Context.WINDOW_SERVICE));
    }
    mLockViewLayoutParams = new WindowManager.LayoutParams();
    mLockViewLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
    mLockViewLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
    mLockViewLayoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
    mLockViewLayoutParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
    mLockViewLayoutParams.windowAnimations = android.R.style.Animation_Translucent;
}

public synchronized void lock() {
    if (mLockView != null amp;amp; !isLocked) {
        mWindowManager.addView(mLockView, mLockViewLayoutParams);
        isLocked = true;
    }
}

public synchronized void unlock() {
    if (mWindowManager != null amp;amp; isLocked) {
        try{
            mWindowManager.removeView(mLockView);
            isLocked = false;
        }catch(IllegalArgumentException e){
            Logger.e("LockUtil unlock failed:" e.getMessage());
        }
    }
    mActivty = null;
}
  

Ответ №1:

После некоторых исследований выяснилось, что белый фон — это цвет фона для действия (окна), поэтому, чтобы удалить его, нам просто нужно установить цвет на прозрачный в теме.

 <style name="Theme.Transparent" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
</style>