在此代码

时间:2016-12-22 11:54:04

标签: android android-layout

我正在尝试在线性布局中使用layout_weight,但它没有设置正确的布局。并显示错误。

如何在相对布局的线性布局中显示线性布局错误也是无用的。

我使用根相对布局来创建此线性布局右侧的此代码的第二部分

请在此代码中帮助我。

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.android.scorekeepercricketmatch.MainActivity">

        <LinearLayout
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_horizontal"
                android:text="@string/team_a"
                android:textAllCaps="true" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/score_minus"
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:text="@string/minus" />

                <TextView
                    android:id="@+id/score_text_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="16dp"
                    android:text="@string/zero" />

                <Button
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:text="@string/plus" />

            </LinearLayout>

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/six" />

            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/four" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_horizontal"
                android:text="@string/wicket"
                android:textAllCaps="true" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:orientation="horizontal">

                <Button
                    android:id="@+id/wicket_minus_button"
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:text="@string/minus" />

                <TextView
                    android:id="@+id/wicket_text_view"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="16dp"
                    android:text="@string/zero" />

                <Button
                    android:layout_width="48dp"
                    android:layout_height="48dp"
                    android:text="@string/plus" />

            </LinearLayout>

        </LinearLayout>

    </RelativeLayout>

4 个答案:

答案 0 :(得分:0)

Layout_weight不单独工作,你需要首先通过android初始化父级的权重值:weightSum =&#34; 3&#34;。

正确使用layout_weight的示例:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2"
android:orientation="horizontal"
>
<TextView
android:layout_weight="1"
android:height="wrap_content"
android:width="0dp"/>

<TextView
android:layout_weight="1"
android:height="wrap_content"
android:width="0dp"/>
</LinearLayout>

这里需要注意的一点是,当你使用layout_weight来划分屏幕时,你应该在该特定字段(高度或宽度)中使用0dp,因为如果你使用wrap_content或match_parent,那么它会让你感到困惑。

答案 1 :(得分:0)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="@string/team_a"
            android:textAllCaps="true" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="horizontal">

            <Button
                android:id="@+id/score_minus"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/minus" />

            <TextView
                android:id="@+id/score_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="16dp"
                android:text="@string/zero" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/plus" />

        </LinearLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.5"
            android:text="@string/six" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.5"
            android:text="@string/four" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:text="@string/wicket"
            android:textAllCaps="true" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="horizontal">

            <Button
                android:id="@+id/wicket_minus_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/minus" />

            <TextView
                android:id="@+id/wicket_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="16dp"
                android:text="@string/zero" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/plus" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

用此替换你的布局。

答案 2 :(得分:0)

我认为我们需要一些关于如何使用weights的简历:

有两个属性。一个是layout_weight,另一个是weightsum

container(a lineaLayout)中您应该设置layout_weightsum

此属性是您在此weights中使用的layout总金额。

例如:您有一个linearlayout,其中包含两个items,并且这两个项目必须具有相同的height

您将设置总和为2,并为每个布局设置weight为1(或3-1,5 / 4-2 ......它也接受小数)。

示例:

<LinearLayout
  android:layout_height="match_parent"
  android:layout_width="match_parent"
  android:orientation="vertical"
  android:weightSum="2">

  <!--Item1 (might be TextView, another LL, a RL, Button,...)-->
   <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
   />

  <!--Item2 (might be TextView, another LL, a RL, Button,...)-->
   <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
   />

</LinearLayout>

这将导致LinearLayout有两个项目占用所有可用空间。

现在有些注意事项:具有权重设置的项目应具有宽度(如果是orizo​​ntally设置)或height(如果垂直设置)设置为0dp。这是因为weight正在设置此属性。

另一个注意事项是,这不能在RelativeLayouts中完成,而只能在LinearLayouts中完成,因为它们没有方向,没有重力,默认情况下没有顺序。

最后要注意的是,布局内的权重总和可以更多,更少或等于您在容器中设置的权重。这仅取决于您的需求。

希望这会有所帮助。了解更多信息you can see the official guide right here

来自doc:

  

同等重视儿童   要创建一个线性布局,其中每个子节点在屏幕上使用相同的空间量,请将每个视图的android:layout_height设置为“0dp”(对于垂直布局)或将每个视图的android:layout_width设置为“0dp”(用于水平布局)。然后将每个视图的android:layout_weight设置为“1”。

答案 3 :(得分:0)

当父级为layout_weight时,您无法提供RelativeLayout。制作父布局Linearlayout,在父级中定义android:weight_sum并在子级中添加layout_weight。不要忘记根据布局方向设置孩子的身高或宽度0dp