如何获得所有可用宽度?

时间:2015-08-07 20:39:25

标签: java android android-layout android-linearlayout

我有一个水平方向的线性布局 布局的左侧是垂直方向的线性布局 布局的右侧是固定宽度80dp * 80dp的小视图 的问题:
如果我设置宽度为“match_parent”的左侧布局,则右侧布局不可见 如果我使用“width = 0dp”和“weight = 1”设置正确的布局以获得尽可能多的可用空间,那么它只是环绕内容。我的意思是它不会一直到右边的下一个元素。

如何确保左侧元素扩展到全部到父级宽度减去右侧元素占用的80 dp?

3 个答案:

答案 0 :(得分:2)

这样做的一般方法是将正确元素的宽度硬编码到80dp并在左侧设置以下内容:

android:layout_width="0dp"
android:layout_weight="1"

这允许右元素自我测量并保留其80dp,然后父元素将所有额外空间分配给左元素,因为它的权重为1。

编辑:

为了进一步解释为什么match_parent将你的右手元素推到屏幕外 - 当LinearLayout有一个带有layout_weight的子元素时,它将执行两次布局传递。第一遍将根据指定的宽度/高度分配最小空间量。在此过程中,您的match_parent元素将按照您所看到的方式运行并填充其父容器,从而将右侧元素推送到屏幕外。然后,在第二个布局过程中,父LinearLayout将根据layout_weight属性分配任何剩余空间。没有人可以分配,所以没有任何改变。

但是,如果在左侧元素上使用layout_width =“0dp”,则在第一次传递期间将不会占用空间,而右侧元素将获得它请求的80dp。在第二次传递期间,LinearLayout父级将根据权重分配剩余宽度 - 因此在这种情况下,左侧元素将接收所有未使用的空间。

答案 1 :(得分:2)

尝试一下(背景颜色仅用于显示正在发生的事情):

/**
 * Returns whether the file was uploaded successfully.
 *
 * @return bool True if the file has been uploaded with HTTP and no error occurred.
 *
 * @api
 */
public function isValid()
{
    $isOk = $this->error === UPLOAD_ERR_OK;
    return $this->test ? $isOk : $isOk && is_uploaded_file($this->getPathname());
}

答案 2 :(得分:0)

我相信“match_parent”选项将推出该布局中的任何其他内容。在左侧布局上尝试“fill_parent”,为其他事物留出空间。