【问题标题】:GridLayout - Aligning ElementGridLayout - 对齐元素
【发布时间】:2013-04-23 00:48:10
【问题描述】:

我正在尝试减少 2 列之间的空间,尝试使用负边距,但没有奏效。有没有办法让图像中的两个元素更接近?

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:useDefaultMargins="true"
    android:alignmentMode="alignBounds"
    android:columnOrderPreserved="false"
    android:layout_gravity="center"
    android:orientation="horizontal"
    android:stretchMode="columnWidth"
    android:background="@color/orange"
    android:textSize="12sp"
    android:columnCount="8">
  <ImageButton
        android:id="@+id/settings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="1"
        android:layout_gravity="left"
        android:src="@drawable/settings" />
    <TextView
        android:id="@+id/currentCityName"
        android:layout_column="2"     
        android:textSize="22sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:text="City name"
        android:layout_columnSpan="4"
        android:layout_gravity="center_horizontal"

        />
  <ImageButton
        android:id="@+id/refresh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_column="7"

        android:layout_columnSpan="1"
        android:layout_gravity="right"
        android:src="@drawable/reload" />
    <ImageView
        android:id="@+id/currentWeatherImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="8"
        android:layout_rowSpan="3"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/cloud" />
    <ImageView
        android:id="@+id/humidityIcon"
        android:layout_width="20dp"         
        android:paddingTop="10dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:layout_marginRight="0dp"
        android:layout_gravity="left"
        android:background="#000000"
        android:src="@drawable/humidity" />
    <TextView
        android:id="@+id/humidity"       
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="13sp"
        android:paddingTop="10dp"
        android:paddingLeft="0dp"
        android:layout_marginLeft="0dp"
        android:layout_gravity="left"
        android:background="#FFFFFF"
        />
    <TextView
        android:id="@+id/temperature"
        android:layout_columnSpan="4"
        android:layout_rowSpan="2"
        android:textSize="49sp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="5dp"
        android:layout_gravity="center_horizontal"/>
    <ImageView
        android:id="@+id/windSpeedIcon"
        android:layout_width="30dp"
        android:layout_marginRight="1dp"
        android:paddingRight="1dp"
        android:layout_gravity="right"
        android:src="@drawable/wind" />

    <TextView
        android:id="@+id/windSpeed"
        android:textSize="12sp"

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        />
    <!-- android:layout_width="40dp" -->
    <TextView
        android:id="@+id/precipitationIcon"
        android:textSize="28sp"
        android:layout_width="40dp"
        />
    <TextView
        android:id="@+id/precipitation"
        android:layout_column="0"
        android:textSize="13sp"
        android:layout_width="40dp"
        />
    <TextView
        android:id="@+id/windDirection16Point"          
        android:textSize="13sp"
        android:layout_width="80dp"
        android:layout_columnSpan="2"
        />
    <TextView
    android:id="@+id/weatherDescription"
    android:layout_gravity="center_horizontal"
    android:layout_row="7"
    android:layout_columnSpan="8"/>

<TextView
    android:id="@+id/section_label"
    android:layout_margin="5dp" 
    android:layout_columnSpan="8" />    
<EditText
    android:minLines="4"
    android:maxLines="4"
    android:id="@+id/edit"
    android:layout_columnSpan="8"/>   

【问题讨论】:

    标签: android android-layout android-gridlayout


    【解决方案1】:

    我建议使用RelativeLayout来实现整个视图,应该是整个视图的最佳解决方案。

    【讨论】:

    • 这在RelativeLayout 中似乎微不足道,我会使用它。
    【解决方案2】:

    你解决了错误的问题——你问的是如何减少网格布局中列之间的空间,但也许你一开始就不应该使用这样的布局!

    您应该为您的特定布局使用的是 relative positioningcompound drawables 的组合(此处为 android:drawableStart)。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="80dp"
        android:background="#d89018"
        android:paddingBottom="4dp"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:paddingTop="4dp"
        >
    
        <TextView
            android:id="@+id/temperature"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:text="25 ℃"
            android:textColor="#fff"
            android:textSize="49sp"
            />
    
        <TextView
            android:id="@+id/humidity"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true"
            android:drawableStart="@drawable/humidity"
            android:gravity="center_vertical"
            android:text="83 %"
            android:textColor="#fff"
            />
    
        <TextView
            android:id="@+id/windSpeed"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:drawableStart="@drawable/wind"
            android:gravity="center_vertical"
            android:text="19 km/h"
            android:textColor="#fff"
            />
    
        <TextView
            android:id="@+id/precipitation"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:drawableStart="@drawable/precipitation"
            android:gravity="center_vertical"
            android:text="0.1 mm"
            android:textColor="#fff"
            />
    
        <TextView
            android:id="@+id/windDirection16Point"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_alignLeft="@id/windSpeed"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:drawableStart="@drawable/windDirection"
            android:gravity="center_vertical"
            android:text="NNW"
            android:textColor="#fff"
            />
    
    </RelativeLayout>
    

    这种布局不仅更简单,您还可以让 Android 为您处理所有间距。 要更改复合可绘制对象和文本之间的间距,请在上面的布局代码中使用android:drawablePadding;在 Java 代码中,应该是 TextView.setCompoundDrawablePadding)。


    用于示例的图标:waterwindsockrainy-weatherwind-rose

    【讨论】:

      【解决方案3】:

      我认为发生的事情是您的视图被拉伸,因为它们试图匹配其列中另一个视图的宽度。

      尝试减小 View 的 columnSpan 或将布局分成两个单独的 GridLayout。

      或者,考虑完全使用不同的布局。我会在这里推荐 RelativeLayout 而不是 GridLayout,但我不知道这如何适合更大的窗口。

      【讨论】:

      • 当我在LinearLayout中放置元素(嵌套在gridlayout中)时,元素根本不显示pastebin.com/4wXpmV9d
      【解决方案4】:

      试试这个:

      <?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="100dp">
      
          <LinearLayout
            android:id="@+id/col1"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:layout_weight="2.4"
            >
              <LinearLayout
                android:id="@+id/col1_row1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                >   
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="83%"/>
            </LinearLayout>         
              <LinearLayout
                android:id="@+id/col1_row2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                >   
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="1.0mm"/>
            </LinearLayout>
          </LinearLayout>  
      
          <LinearLayout
            android:id="@+id/col2"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:layout_weight="2.0"
            android:gravity="center"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="25'"
                android:textSize="50dp"
                />      
          </LinearLayout>
      
          <LinearLayout
            android:id="@+id/col3"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical"
            android:layout_weight="2.4"
            >
              <LinearLayout
                android:id="@+id/col3_row1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                >   
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="19Km"/>
            </LinearLayout>         
              <LinearLayout
                android:id="@+id/col3_row2"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_vertical"
                >   
                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/icon"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="NNW"/>
            </LinearLayout>
          </LinearLayout>
      
      </LinearLayout>
      

      【讨论】:

      • 深层布局 - 嵌套过多的布局不利于性能。考虑使用更扁平的布局,例如 RelativeLayout 或 GridLayout 来提高性能。默认最大深度为 10。developer.android.com/training/improving-layouts/…
      • 我觉得深度3不算太多!
      • 请您与我链接的文章中的示例进行辩论。
      • 你是对的,如果请求的布局是最终的!我想它可能会增长并包含更多项目。所以一个简单的网格布局是不够的。
      • 如果他要添加更多项目,这只是一个更好的理由来提高效率,并且可能更容易使用 RelativeLayout 添加项目。
      【解决方案5】:

      我认为您应该将 usedefaultMargins 更改为 false 并为元素设置自己的边距。

      android:useDefaultMargins="false";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 2023-03-03
        相关资源
        最近更新 更多