获取水平边距/填充的总和

  • 本文关键字:填充 水平 获取 android
  • 更新时间 :
  • 英文 :


我有一个嵌套的线性布局(或其他类型的布局),我只想总结此视图及其父视图和潜在的祖父视图的所有边距/填充水平值等等。

我只需要这个布局的干净宽度,这将是window width minus all horizontal margins/paddings.

我是这样开始的:

private int sumMargins(View view) {
    LayoutParams params = (LayoutParams) view.getLayoutParams();
    int margins = params.leftMargin + params.rightMargin + view.getPaddingStart() + view.getPaddingEnd();
    ViewParent parent = view.getParent();
    while (parent != null) {
        // here I need to recursively gather all nested parents margins/paddings 
        // (add them to the `margins` variable)
    }
    return margins;
}

ViewGroup.MarginLayoutParams将允许您访问视图的边距。以下代码将遵循视图的层次结构,直到顶级DecorView,并对左/右边距和填充求和。

private int sumMargins(View view) {
    ViewGroup.MarginLayoutParams marginParams;
    int margins = 0;
    View decorView = getWindow().getDecorView();
    while (view != null && view != decorView) {
        marginParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        if (marginParams != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                margins += marginParams.getMarginStart() + marginParams.getMarginEnd() +
                        view.getPaddingStart() + view.getPaddingEnd();
            } else {
                margins += marginParams.leftMargin + marginParams.rightMargin +
                        view.getPaddingLeft() + view.getPaddingRight();
            }
        }
        view = (View) view.getParent();
    }
    return margins;
}

最新更新