【问题标题】:Creating a linearlayout with weights使用权重创建线性布局
【发布时间】:2019-05-22 22:13:29
【问题描述】:

我正在尝试做类似的事情 - Android Layout(User Interface) 只是我想让第一列的权重为 4,第二列的权重为 2(也有两行),最后一列的权重1(也有三行)......问题是它自己搞砸了(我复制并粘贴了答案并根据我的需要更改了所有内容,但它一直搞砸了...... =)有什么帮助吗? [代码]

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background_color"
    android:orientation="vertical"

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textDishes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="@string/dishes"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <ImageView
            android:id="@+id/imageDishes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="@dimen/seperator_size"
        android:background="@color/seperator" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:measureWithLargestChild="true"
        android:orientation="horizontal"
        android:weightSum="2" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textfood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/food"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ImageView
                android:id="@+id/imagefood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>

        <View
            android:layout_width="fill_parent"
            android:layout_height="@dimen/seperator_size"
            android:background="@color/seperator" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textMalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/malls"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ImageView
                android:id="@+id/imageMalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    </LinearLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="@dimen/seperator_size"
        android:background="@color/seperator" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:weightSum="3"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>

        <View
            android:layout_width="fill_parent"
            android:layout_height="@dimen/seperator_size"
            android:background="@color/seperator" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/coupons"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>

         <View
            android:layout_width="fill_parent"
            android:layout_height="@dimen/seperator_size"
            android:background="@color/seperator" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/markets"
                android:textAppearance="?android:attr/textAppearanceLarge" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>
[/code]

这就是结果——

结果应该看起来像 - 有什么帮助吗??

【问题讨论】:

    标签: android android-layout android-linearlayout


    【解决方案1】:

    编辑现在工作的例子

    这不是一个完整的答案,因为垂直分隔线仍然不起作用,但希望它能让你朝着正确的方向前进:

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:gravity="center"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/textDishes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Dishes"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <ImageView
            android:id="@+id/imageDishes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>
    
    <View
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@color/red" />
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:orientation="horizontal" >
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textfood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Food"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imagefood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    
        <View
            android:layout_width="5dp"
            android:layout_height="fill_parent"
            android:background="@color/red"
            android:gravity="center" >
        </View>
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textMalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Malls"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageMalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    </LinearLayout>
    
    <View
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@color/red" />
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="App name"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    
        <View
            android:layout_width="5dp"
            android:layout_height="fill_parent"
            android:background="@color/red"
            android:gravity="center" >
        </View>
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Coupons"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    
        <View
            android:layout_width="5dp"
            android:layout_height="fill_parent"
            android:background="@color/red"
            android:gravity="center" >
        </View>
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Markets"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

    • 如果你在我旁边,我会吻你!...tnx 很多兄弟..!!
    【解决方案2】:

    我不确定这是否只是您在此处包含 XML 时的一个错误,但是您在父 LinearLayout 之后缺少一个“>”。

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background_color"
    android:orientation="vertical"
    

    应该是

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/background_color"
    android:orientation="vertical" >
    

    此外,您正在此父布局的某些子布局中使用权重,但您尚未在父 LinearLayout 中指定 weightSum 总计。请记住,weightSum 是分配给孩子的总权重,因此他们的权重应该加起来就是这个 weightSum。此外,请注意,但使用嵌套权重(如果您将其添加进去,您会这样做)对性能不利。

    也许解决您的问题的最佳方法是探索不同的布局选项,而不是使用 LinearLayout?不过,你可以让它以这种方式工作。使父权重总和为 7,并确保根据需要将其分配给子级。

    根据您的图片(并使用线性布局),我认为它应该看起来像这样:

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:weightSum="7" >
    
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:weight="4" >
    
    // This one's child here - it has weight 1.
    
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:weightSum="2"
        android:weight="2" >
    
    // This one's children here - they both have weight 1.
    
     <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:weightSum="3"
        android:weight="1" >
    
    // This one's children here - they all have weight 1.
    

    不要忘记关闭 LinearLayouts。我也没有测试过该代码,因此您需要检查它是否存在可能的错误。

    【讨论】:

    • weightSum 不是必需的
    • @invertigo - 啊,是的,你是对的,伙计。它只会根据已分配的权重假设 weightSum。我只是真的习惯了把 weightSum 扔进去,但是很好!
    【解决方案3】:

    我不确定这是否是您唯一的问题,但是当使用weight 时,您的layout_width 对于水平方向应该是“0dp”,而layout_height 对于垂直方向应该是“0dp”。所以例如你的第一个孩子应该是

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="horizontal" >
    

    因为它属于LinearLayout 的父级,而orientation 的父级是vertical

    更新

    这样的事情应该会让你非常接近。注意我必须拿出你的资源才能让它在我的编辑器中工作,所以你只需要把它们放回去

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:gravity="center_horizontal|center_vertical"
        android:orientation="horizontal" >
    
        <TextView
            android:id="@+id/textDishes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:text="Dishes"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
        <ImageView
            android:id="@+id/imageDishes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" />
    </LinearLayout>
    
    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp" />
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="2"
        android:measureWithLargestChild="true"
        android:orientation="horizontal"
        android:weightSum="2" >
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textfood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Food"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imagefood"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    
        <View
            android:layout_width="1dp"
            android:layout_height="fill_parent" />
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textMalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Malls"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageMalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    </LinearLayout>
    
    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp" />
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:weightSum="3"
        android:orientation="horizontal" >
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="App name"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    
        <View
            android:layout_width="fill_parent"
            android:layout_height="1dp" />
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Coupons"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    
         <View
            android:layout_width="fill_parent"
            android:layout_height="1dp" />
    
        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >
    
            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Markets"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    
            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher" />
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

    • 它是怎么搞砸的?当我使用该代码时,它看起来基本上没有分隔符。您可能也想尝试清理您的项目...项目 --> 清理
    • 只要添加一个垂直分隔线,就会出现问题。这个例子也有一些问题,第一个 LL 应该是垂直的,而不是水平的,并且一些分隔线的宽度和高度是相反的。
    • @invertigo 不,orientation 是正确的。第一个LinearLayout 是垂直的。我没有看到任何向后的分隔线,但我想有可能......在我的编辑器中没有它就很难分辨了。但它给了我 OP 在没有分隔符的情况下寻找的输出,因此它们可能需要调整
    • 对不起,第一个嵌套的 LL 应该是垂直的(盘子的)
    • @invertigo 我明白你现在在说什么了。是的,根据更新的图片,是的,但是当我发布时,我复制了他假设他知道所需方向的内容。但这很容易改变。当然,在我发布时,我的回答应该能让他上路
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多