Android dialog位置改变时 如何取消子视图onmeasure
时间: 2023-12-06 08:44:49 浏览: 30
当 Android 中的对话框位置发生更改时,会触发对话框中子视图的 `onMeasure` 方法。如果你想在更改位置后取消子视图的 `onMeasure`,可以尝试以下方法:
1. 在对话框的 `onCreate` 方法中,将对话框的布局参数设置为 `WRAP_CONTENT`。这将使对话框的大小根据其内容自动调整,而不是强制使用固定大小。
2. 在对话框的 `onWindowAttributesChanged` 方法中,将对话框的布局参数设置为屏幕宽度的一半。这将使对话框始终处于屏幕中央,并且不会触发子视图的 `onMeasure` 方法。
以下是示例代码:
```java
public class MyDialog extends Dialog {
public MyDialog(Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_dialog_layout);
// 设置对话框的布局参数为 WRAP_CONTENT
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
getWindow().setAttributes(params);
}
@Override
public void onWindowAttributesChanged(WindowManager.LayoutParams params) {
super.onWindowAttributesChanged(params);
// 设置对话框的布局参数为屏幕宽度的一半
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
params.width = metrics.widthPixels / 2;
getWindow().setAttributes(params);
}
}
```
注意:这是一种简单的解决方案,可能不适用于所有情况。如果子视图仍然需要进行测量,请考虑使用其他方法来优化性能。