微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取 ConstraintLayout 高度和宽度

如何解决获取 ConstraintLayout 高度和宽度

我想创建一种方法,根据 parentheightwidth 计算边距值。下面的代码-1height 输出 width。如何正确获取父级的高度和宽度?

@RequiresApi(api = Build.VERSION_CODES.R)
public void setMarginsPercentages(Context context,@NotNull ConstraintLayout parent,@NotNull Object object,double leftPercentage,double topPercentage,double rightPercentage,double bottomPercentage) {
    FrontEndobject item = getobjectType(object);

    ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(parent.getLayoutParams());
    
    int height = params.height; //outputs -1
    int width = params.width; //outputs -1

    int left = (int) (leftPercentage * width);
    int right = (int) (rightPercentage * width);
    int top = (int) (topPercentage * height);
    int bottom = (int) (bottomPercentage * height);
    item.setMargins(parent,object,left,top,right,bottom);
}

解决方法

这里有几个问题,parms.height 会给你这个值 (https://developer.android.com/reference/android/view/ViewGroup.LayoutParams#MATCH_PARENT),它是 -1。不是您要查找的约束布局的像素高度。

此外,在系统呈现视图之前,您不能在视图上使用宽度/高度/getMeasuredWidth/getMeasuredHeight(通常来自 onCreate/onResume)。但是你可以设置一个监听器,在系统计算出 MATCH_PARENT 的像素后获取值。 在你的片段的 onViewCreated() 上试试这个

    @Override
    public void onViewCreated(@NonNull View view,@Nullable Bundle savedInstanceState) {
        super.onViewCreated(view,savedInstanceState);
        myView = view.findViewById(R.id.rtt); # your constraint layout
        view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v,int left,int top,int right,int bottom,int oldLeft,int oldTop,int oldRight,int oldBottom) {
                int height = bottom - top;
                int width = right - left;
                Log.i("LOG","height is" + height);
                Log.i("LOG","width is " + width);
            }
        });
    }

无论如何,请注意您只有在视图呈现后才能获得此值。此时视图已经呈现,您可能无法编辑边距。您可能需要重新考虑您的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?