是否可以在XML布局文件中设置按钮的大小,以便一方面不占用父级(屏幕)的整个宽度,并且另一方面,不使用绝对像素值?
为了更好地解释我的问题,以下代码段中的问题是"match_parent"
占据整个宽度:
<Button android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16px"
android:paddingLeft="16px"
android:paddingRight="16px"
android:paddingTop="16px"
android:text="@string/first_button" />
我知道可以控制大小during runtime,但我很想知道这是否也可以在XML文件中使用。
有类似android:layout_width="match_HALF_parent"
的内容吗?
答案 0 :(得分:6)
布局权重可以做到这一点。基本上你需要做的是在父布局中设置weightSum,然后在子设置中设置layout_weight:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:weightSum="2" android:orientation="horizontal">
<Button android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingBottom="16px"
android:paddingLeft="16px"
android:paddingRight="16px"
android:paddingTop="16px"
android:text="@string/first_button" />
</LinearLayout>
父母的weightSum和孩子的体重之间的关系决定了孩子的宽度:在这种情况下,它将是一半;如果我们要将父母的体重总和增加到3,那么孩子将是其父母宽度的三分之一。
我在blog上写过这篇文章。
答案 1 :(得分:2)
原始示例可能是这样的:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="Button"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="100dp"
android:layout_marginTop="100dp"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
></Button>
</LinearLayout>
或者,您可以将android:padding
设置为布局,而不是将边距设置为按钮。
答案 2 :(得分:0)
解决方案是嵌套严重的 LinearLayouts 。 使用一个垂直LinearLayout作为容器并在其上堆叠水平LinerarLayouts。每个水平带有一个重量:
android:layout_weight="0.5"
您还应确保将宽度和高度设置如下:
android:layout_width="match_parent"
android:layout_height="match_parent"
最后,你用小部件(例如按钮)填充这些水平布局,并给它们一个重量。
源可能看起来像以下代码段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@drawable/bg"
tools:context=".MainActivity">
<!--parent container-->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--child container-->
<!--each horizontal layout gets 1/3 of remaining space-->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_weight="0.5"
android:layout_height="match_parent">
<Button
android:background="@color/colorPrimary"
android:layout_width="fill_parent"
android:layout_weight="1"
android:layout_height="fill_parent" android:text="100%" android:textSize="60dp"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_weight="0.5"
android:layout_height="match_parent">
<Button
android:background="@color/colorPrimary"
android:layout_width="fill_parent"
android:layout_weight="0.5"
android:layout_height="fill_parent"
android:text="50%"
android:textSize="60dp"/>
<Button
android:background="@color/colorPrimaryDark"
android:layout_width="fill_parent"
android:layout_weight="0.5"
android:layout_height="fill_parent"
android:textSize="60dp"
android:text="50%"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_weight="0.5"
android:layout_height="match_parent">
<Button
android:background="@color/colorPrimary"
android:layout_width="fill_parent"
android:layout_weight="0.7"
android:layout_height="fill_parent" android:text="30%" android:textSize="60dp"/>
<Button
android:background="@color/colorPrimaryDark"
android:layout_width="fill_parent"
android:layout_weight="0.3"
android:layout_height="fill_parent" android:allowUndo="false" android:text="70%"
android:textSize="60dp"/>
</LinearLayout>
<!-- Just for spacing-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="20dp">
</RelativeLayout>
</LinearLayout>
</LinearLayout>
为此得到结果: