android dialog 动态改变位置时会闪烁 优化方法
时间: 2023-10-25 09:08:50 浏览: 76
Android中的Dialog可以通过设置其位置来调整在屏幕上的显示位置,但是在某些情况下,动态改变Dialog位置可能会导致闪烁问题。这通常是由于Dialog的重新绘制引起的。
为了避免这种情况,一种优化方法是使用WindowManager.LayoutParams中的 FLAG_LAYOUT_NO_LIMITS 标志,这将使Dialog不受其父视图的限制,并且可以自由移动。同时,我们可以在设置新位置之前将Dialog设置为不可见,然后在设置新位置之后再将其设置为可见,这将有助于减少闪烁的发生。
以下是一个示例代码:
```java
// 将Dialog设置为不可见
dialog.setVisibility(View.INVISIBLE);
// 获取Dialog的Window对象
Window window = dialog.getWindow();
// 设置WindowManager.LayoutParams中的FLAG_LAYOUT_NO_LIMITS标志
WindowManager.LayoutParams lp = window.getAttributes();
lp.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
window.setAttributes(lp);
// 设置新位置
lp.x = newX;
lp.y = newY;
window.setAttributes(lp);
// 将Dialog设置为可见
dialog.setVisibility(View.VISIBLE);
```
这样,在动态改变Dialog位置时,就可以避免闪烁问题了。
阅读全文