我正在编写自己的布局,扩展ViewGroup类。 您需要覆盖的 meethod 之一是 onMeasure(( 方法。 在此方法中,父视图(将包含我的布局的视图(将传递我的布局可以具有的可能宽度和高度。
@Override
public class MyOwnLayout extends ViewGroup {
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// Argumens passed by the parent View.
// Can be both arguments be as MeasureSpec.UNSPECIFIED simultaneously ??
}
}
此 MeasureSpec 参数可以有三种可能的模式:"EXACLY"、"AT_MOST"和"UNSPECIFIC"(它们的含义在这里。 具体来说,当我的布局在该特定维度中可以具有所需的任何大小时,父级会传递"未指定"值。 例如,当父级是滚动视图时,会给出此值。
所以我唯一的疑问是:父级有可能同时将它们作为未指定传递给我的布局。 如果可能,在哪些情况下?
您可以创建一个双向滚动的自定义视图。这将(或可以(用UNSPECIFIED
的高度和宽度来测量其子项。 嵌套在ScrollView
中的HorizontalScrollView
也可能导致此行为,但不建议这样做。
通常,这种情况(UNSPECIFIED
(不会出现。不忽略它可能没关系。 但是,我发现忽略技术上合法的配置是将来引入奇怪错误的好方法。 如果可以的话,您应该在onMeasure
处理这种情况。