Android 获取或计算可用屏幕空间的最佳方法是什么

Android 获取或计算可用屏幕空间的最佳方法是什么,android,android-layout,Android,Android Layout,我正在尝试为我的应用程序获取可用的屏幕空间。这将是操作/工具栏和导航栏之间的空间。 我需要它的原因。在约束布局中,我有六个按钮垂直链接在一起。在运行时,我需要调整按钮的大小。该应用程序具有固定的横向方向。 最后,我希望将链的底部按钮约束到底部父项或导航栏(如果存在),并将顶部按钮约束到操作/工具栏 我发现有一个用于操作栏/工具栏的属性资源,我正在约束链的顶部 对于底部,我的想法是使用约束向导约束底部按钮。我只是不知道如何找到屏幕位置来定位它 步骤: 获取窗口高度 按该高度比例调整图像大小 将此代

我正在尝试为我的应用程序获取可用的屏幕空间。这将是操作/工具栏和导航栏之间的空间。 我需要它的原因。在约束布局中,我有六个按钮垂直链接在一起。在运行时,我需要调整按钮的大小。该应用程序具有固定的横向方向。 最后,我希望将链的底部按钮约束到底部父项或导航栏(如果存在),并将顶部按钮约束到操作/工具栏

我发现有一个用于操作栏/工具栏的属性资源,我正在约束链的顶部

对于底部,我的想法是使用约束向导约束底部按钮。我只是不知道如何找到屏幕位置来定位它

步骤:

获取窗口高度 按该高度比例调整图像大小 将此代码添加到setContentView之后或膨胀之后的某个位置:

// root layout is the constraint layout which holds the buttons
rootLayout.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 rootHeight = v.getHeight();
                int btnHeight = rootHeight/6;
                btn1.getLayoutParams().height = btnHeight;
                btn1.requestLayout();
                btn2.getLayoutParams().height = btnHeight;
                btn2.requestLayout();
                // and same for the rest of your views
            }
        });

如果前面的答案因为任何原因都不起作用,那么还有一种方法可以做到这一点。在布局编辑器中,将按钮放置在约束布局上,并将它们一个约束到另一个。将约束设置为固定,例如8dp。第一个按钮约束在根布局的顶部,最后一个按钮约束在底部。最后设置按钮的高度以匹配约束。我在移动设备上,所以我不能复制任何xml,但这将迫使高度由根布局的尺寸和约束长度决定

谢谢。然后,我将如何在同一个运行时间周期内访问新的top和start位置。我试图在运行时访问buttonimage的新中心点。只有LayoutChangeListener可以附加到视图,它会通知您大小和位置的更改。因此,您可以将其附加到根约束布局,当它触发时,您可以使用上述函数重新计算。我在移动设备上,因此无法帮助您编写代码,但我相信您会很容易在文档中找到它。@Matic,因为这会返回约束布局的左、右、上、下的新旧参数,在我的情况下,我不想在每个按钮上都附加一个参数,这样我就可以得到新的左、右、上、下参数。公共抽象void onlayout更改视图v,int left,int top,int right,int bottom,int oldlight,int oldRight,int oldbottom我刚回家,花了几分钟编写和测试代码。我将用代码和解释更新答案。@Matic,OnLayoutChangeListener成功了。在我的帖子中,我添加了调试运行的屏幕截图。您可以看到我在何处添加了一个块来检索之前的标注和之后的标注。它们返回了相同的结果,后面的“维度”不应该反映更改。如何检索newafter维度?谢谢你的帮助!我想知道在每个按钮上设置OnLayoutChangeListener是否是可行的方法。我试试看。我最终要做的是在这些按钮的中心点和屏幕上其他按钮的中心点之间画一条线,因此希望获得每个按钮的新“顶部”和“左侧”。当我运行应用程序时会发生变化,方向固定为横向。我会看看这是否有效,然后告诉你。谢谢