#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>