【问题标题】:fixed width LinearLayout固定宽度线性布局
【发布时间】:2017-10-31 11:25:13
【问题描述】:

我正在尝试并排放置两个线性布局并将内容放入其中。

我希望两个线性布局并排放置,但左侧应该占屏幕的 3/4 左右,右侧占其余部分。

这是我的代码:https://gitlab.com/snippets/1682040

但是这两种线性布局总是会根据内容改变宽度和高度。

如何让两个线性布局并排固定宽度和高度?

始终欢迎使用 RelativeLayout 提供更好的解决方案。

这是结果:

【问题讨论】:

  • 如果您可以分享您的输出的任何图像,那就太好了
  • 完成 =) 对不起,我忘了
  • 试试这个给出第一个线性布局 android:layout_weight=".75" 并给出第二个线性布局 android:layout_weight=".25"
  • 您是否以编程方式更改布局参数中的某些内容?
  • @NileshRathod,没用。

标签: android android-linearlayout fixed


【解决方案1】:

LinearLayoutlayout_weight 属性和android:weightSum 属性用于父布局。

做这样的事

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="15dp"
    android:weightSum="1">
      <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight=".75" // For First layout to 3/4
        android:background="@color/colorPrimary"
        android:gravity="left|center"
        android:orientation="vertical">
            //First Layout content Here
        </LinearLayout>

        <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight=".25" // For Second layout to rest of screen
        android:background="@color/colorAccent"
        android:gravity="center"
        android:orientation="vertical">
               //Second Layout Content Here
           </LinearLayout>
</LinearLayout>

【讨论】:

    【解决方案2】:

    我知道您要求使用LinearLayout 解决此问题,但我建议您使用ConstraintLayout 解决此问题。如果没有嵌套视图,您将获得令人难以置信的性能提升。

    在这个示例中,我从屏幕左侧添加了一个vertical guideline at 75%。我只需要删除嵌套的 LinearLayouts 并将约束添加到您的视图中!

    试试看!

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    
    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="0dp"
        android:layout_height="628dp"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:background="@color/colorPrimary"
        android:gravity="left|center"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/guideline4"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    
        <TextView
            android:id="@+id/repository_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="AAAAA"
            android:textColor="@color/blue"
            android:textSize="20dp" />
    
        <TextView
            android:id="@+id/repository_description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="2"
            android:text="AAAAA"
            android:textColor="@color/gray"
            android:textSize="15dp" />
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="horizontal">
    
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_menu_camera" />
    
            <TextView
                android:id="@+id/repository_fork_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="123"
                android:textColor="@color/orange"
                android:textSize="20dp" />
    
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:src="@drawable/ic_menu_camera" />
    
            <TextView
                android:id="@+id/repository_star_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="123"
                android:textColor="@color/orange"
                android:textSize="20dp" />
    
        </LinearLayout>
    
    </LinearLayout>
    
    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="0dp"
        android:layout_height="628dp"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:background="@color/colorAccent"
        android:gravity="center"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/guideline4"
        app:layout_constraintTop_toTopOf="parent">
    
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/user_image"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />
    
        <TextView
            android:id="@+id/username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="AAAAA"
            android:textColor="@color/blue" />
    
        <TextView
            android:id="@+id/first_last_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Mock Name"
            android:textColor="@color/lightGray" />
    
    </LinearLayout>
    
    <android.support.constraint.Guideline
        android:id="@+id/guideline4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.75" />
    

    【讨论】:

      【解决方案3】:

      试试这个给你的第一个LinearLayout android:layout_weight=".75",这样它可以在屏幕上占据 3/4 空间 而不是将 android:layout_weight="0.25" 分配给您的第二个 LinearLayout,以便占用剩余空间

       <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="horizontal"
          android:padding="15dp"
          android:weightSum="1">
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="match_parent"
              android:layout_weight="0.75"
              android:background="@color/colorPrimary"
              android:orientation="vertical">
      
              <TextView
                  android:id="@+id/repository_name"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="AAAAA"
                  android:textColor="@color/colorBlue"
                  android:textSize="20dp" />
      
              <TextView
                  android:id="@+id/repository_description"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:ellipsize="end"
                  android:maxLines="2"
                  android:text="AAAAA"
                  android:textColor="@color/colorGreen"
                  android:textSize="15dp" />
      
              <LinearLayout
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:gravity="center"
                  android:orientation="horizontal">
      
                  <ImageView
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:src="@drawable/ic_menu_camera" />
      
                  <TextView
                      android:id="@+id/repository_fork_number"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:text="123"
                      android:textColor="@color/colorPrimary"
                      android:textSize="20dp" />
      
                  <ImageView
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_marginLeft="15dp"
                      android:src="@drawable/ic_menu_camera" />
      
                  <TextView
                      android:id="@+id/repository_star_number"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:text="123"
                      android:textColor="@color/colorPrimary"
                      android:textSize="20dp" />
      
              </LinearLayout>
      
          </LinearLayout>
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="match_parent"
              android:layout_weight="0.25"
              android:background="@color/colorAccent"
              android:gravity="center"
              android:orientation="vertical">
      
              <de.hdodenhof.circleimageview.CircleImageView
                  android:id="@+id/user_image"
                  android:layout_width="40dp"
                  android:layout_height="40dp"
                  android:layout_alignParentLeft="true"
                  android:layout_centerVertical="true" />
      
              <TextView
                  android:id="@+id/username"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="AAAAA"
                  android:textColor="@color/colorBlue" />
      
              <TextView
                  android:id="@+id/first_last_name"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Mock Name"
                  android:textColor="@color/colorRed" />
      
          </LinearLayout>
      
      </LinearLayout>
      

      【讨论】:

      • 为什么投反对票...?还请提及一个正当理由,以便我改进我的答案
      • 我没有投反对票。我尝试了您的解决方案,但没有成功。
      【解决方案4】:

      似乎两个权重都设置为“1”。你试过“.5”吗?

         <LinearLayout
          android:layout_width="0dp"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:background="@color/colorPrimary"
          android:layout_weight="0.50"
          android:gravity="left|center">
      

      【讨论】:

      • 如果它们的重量相同,难道不应该将空间精确地分成 2 吗?如果它们都在 0.5 上,我认为不会有任何区别
      • 是的,这样拆分正好在中间。所需的权重或重要性(请参阅developer.android.com/guide/topics/ui/layout/linear.html)取决于所需的结果。更精细或更灵活的布局将是 ContraintLayout,或使用 RelativeLayout。
      • 我也会去RelativeLayout 里面有 2 个孩子。
      【解决方案5】:

      试试这个我增加了重量

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="horizontal"
          android:padding="15dp"
          android:weightSum="1">
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="match_parent"
              android:layout_weight=".75"
              android:background="@color/colorPrimary"
              android:gravity="left|center"
              android:orientation="vertical">
      
              <TextView
                  android:id="@+id/repository_name"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="AAAAA"
                  android:textColor="@color/blue"
                  android:textSize="20dp" />
      
              <TextView
                  android:id="@+id/repository_description"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:ellipsize="end"
                  android:maxLines="2"
                  android:text="AAAAA"
                  android:textColor="@color/gray"
                  android:textSize="15dp" />
      
              <LinearLayout
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:gravity="center"
                  android:orientation="horizontal">
      
                  <ImageView
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:src="@drawable/ic_menu_camera" />
      
                  <TextView
                      android:id="@+id/repository_fork_number"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:text="123"
                      android:textColor="@color/orange"
                      android:textSize="20dp" />
      
                  <ImageView
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_marginLeft="15dp"
                      android:src="@drawable/ic_menu_camera" />
      
                  <TextView
                      android:id="@+id/repository_star_number"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:text="123"
                      android:textColor="@color/orange"
                      android:textSize="20dp" />
      
              </LinearLayout>
      
          </LinearLayout>
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="match_parent"
              android:layout_weight=".25"
              android:background="@color/colorAccent"
              android:gravity="center"
              android:orientation="vertical">
      
              <de.hdodenhof.circleimageview.CircleImageView
                  android:id="@+id/user_image"
                  android:layout_width="40dp"
                  android:layout_height="40dp"
                  android:layout_alignParentLeft="true"
                  android:layout_centerVertical="true" />
      
              <TextView
                  android:id="@+id/username"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="AAAAA"
                  android:textColor="@color/blue" />
      
              <TextView
                  android:id="@+id/first_last_name"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Mock Name"
                  android:textColor="@color/lightGray" />
      
          </LinearLayout>
      
      </LinearLayout>
      

      【讨论】:

      • 对于 3/4 添加 .75
      【解决方案6】:

      首先从父布局中移除 weightSum 属性。

      如果您希望您的第一个布局占您的 3/4,则应为另一个布局设置权重 0.75 和 0.25 (1/4),如下所示:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:padding="15dp">
      
      <LinearLayout
          android:layout_width="0dp"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:background="@color/colorPrimary"
          android:layout_weight=".75"
          android:layout_gravity="left"
          android:gravity="left|center">
      
          <TextView
              android:id="@+id/repository_name"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="AAAAA"
              android:textColor="@color/blue"
              android:textSize="20dp"/>
      
          <TextView
              android:id="@+id/repository_description"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:maxLines="2"
              android:ellipsize="end"
              android:text="AAAAA"
              android:textColor="@color/gray"
              android:textSize="15dp"/>
      
          <LinearLayout
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:orientation="horizontal"
              android:gravity="center">
      
              <ImageView
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:src="@drawable/ic_menu_camera"/>
      
              <TextView
                  android:id="@+id/repository_fork_number"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="123"
                  android:textColor="@color/orange"
                  android:textSize="20dp"/>
      
              <ImageView
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:src="@drawable/ic_menu_camera"
                  android:layout_marginLeft="15dp"/>
      
              <TextView
                  android:id="@+id/repository_star_number"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="123"
                  android:textColor="@color/orange"
                  android:textSize="20dp"/>
      
          </LinearLayout>
      
      </LinearLayout>
      
      <LinearLayout
          android:layout_width="0dp"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:background="@color/colorAccent"
          android:layout_weight=".25"
          android:gravity="center">
      
          <de.hdodenhof.circleimageview.CircleImageView
              android:id="@+id/user_image"
              android:layout_width="40dp"
              android:layout_height="40dp" />
      
          <TextView
              android:id="@+id/username"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="AAAAA"
              android:textColor="@color/blue"/>
      
          <TextView
              android:id="@+id/first_last_name"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Mock Name"
              android:textColor="@color/lightGray"/>
      
      </LinearLayout>
      

      【讨论】:

        【解决方案7】:

        试试这个:

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
        
                    <LinearLayout
        
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight=".75"
                        android:orientation="vertical"
                        android:visibility="visible">
        
                        <TextView
        
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center"
        
                            android:textColor="#000"
                            android:textSize="16dp" />
        
                        <TextView
        
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:background="@drawable/shape_txt"
                            android:gravity="center"
                          />
        
                    </LinearLayout>
        
                    <LinearLayout
        
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight=".25"
                        android:orientation="vertical"
                        android:visibility="visible">
        
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="center"
        
                            android:textColor="#000"
                            android:textSize="16dp" />
        
                        <TextView
        
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:background="@drawable/shape_txt"
                            android:gravity="center"
                            />
        
                    </LinearLayout>
                </LinearLayout>
        

        【讨论】:

          【解决方案8】:

          在父布局中将权重总和更改为 4,并为子线性布局添加权重为 3,以便它可以占用 3/4 空间和 1 到子线性布局,以便占用剩余空间。

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal"
              android:padding="15dp"
              android:weightSum="4">
          
              <LinearLayout
                  android:layout_width="0dp"
                  android:layout_height="match_parent"
                  android:layout_weight="3"
                  android:background="@color/colorPrimary"
                  android:gravity="left|center"
                  android:orientation="vertical">
          
                  //Your contents
          
              </LinearLayout>
          
          
              <LinearLayout
                  android:layout_width="0dp"
                  android:layout_height="match_parent"
                  android:layout_weight="1"
                  android:background="@color/colorAccent"
                  android:gravity="center"
                  android:orientation="vertical">
          
                  //Your contents
          
              </LinearLayout>
          
          </LinearLayout>
          

          【讨论】:

          • 在 android studio 上看起来不错,但是当我在模拟器上运行时它会中断,因为“description”字段很长