【问题标题】:LinearLayout changing size线性布局改变大小
【发布时间】:2018-11-24 09:37:29
【问题描述】:

我使用 LinearLayout(包含一些内容)作为 GridView 中单元格的视图。问题是虽然我已经指定了布局的高度(android:layout_height="50pt"),但有些单元格更大。布局是垂直的,里面的项目没有高度(0pt),但它们有重量,里面有2个TextView和1个ImageView。我注意到导致问题的单元格内的图像有点大,但为什么视图会变大? 我会很感激你的帮助。

XML:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="50pt"
android:gravity="center"
android:orientation="vertical">

<ImageView
    android:id="@+id/ivHero"
    android:layout_width="match_parent"
    android:layout_height="0pt"
    android:layout_weight="4"
    android:background="@color/white"
    app:srcCompat="@drawable/avatar" />

<TextView
    android:id="@+id/tvName"
    android:layout_width="match_parent"
    android:layout_height="0pt"
    android:layout_weight="1"
    android:gravity="center"
    android:singleLine="true"
    android:text="TextView"
    android:textColor="@color/white"
    android:textSize="7pt" />

<TextView
    android:id="@+id/tvPercent"
    android:layout_width="match_parent"
    android:layout_height="0pt"
    android:layout_weight="1"
    android:gravity="center"
    android:text="20%"
    android:textColor="@color/white"
    android:textSize="7pt" />

【问题讨论】:

  • 您是否对所有小部件使用相同的权重?
  • 不,我没有,我使用不同的权重 (4.1.1)

标签: android gridview layout height


【解决方案1】:

您可以尝试在布局中使用 dp 而不是 pt 吗? 我使用 dp 和 pt 对它进行了测试,具有不同的图像尺寸,它看起来不一样。

也看看这个

pt - 屏幕上的一个点,一种常见的字体大小单位。这是一个与密度无关的单位,单个 pt 的物理尺寸在每个屏幕密度上都是相同的。一英寸有 72 磅。单个 pt 转换为的像素数取决于屏幕密度。

dp - 与密度无关的像素。这是一个与密度无关的单位,但是单个 dp 的物理尺寸仅在每个屏幕密度上大致相同。一英寸大约有 160 dp。根据设备的密度桶,应用缩放因子将 dp 转换为 160 dpi 的像素数。单个 dp 转换为的像素数取决于屏幕上的像素密度和设备落入的密度桶。

sp - 一个独立于比例的像素,专门为文本大小指定。这是一个与密度无关的单位,但是单个 sp 的物理尺寸仅在每个屏幕密度上大致相同。缩放因子取决于设备的密度桶以及用户的文本大小偏好,用于将 sp 转换为 160 dpi 的像素数。转换为的像素数取决于屏幕密度和设备所处的密度桶。

有关更多详细信息,您可以查看其他answer in StackOverflow 或此github repo

【讨论】:

    【解决方案2】:
    1. 在这里,您对所有三个元素都使用了“layout_weight”参数,并提供“layout_height”为 0dp。错了。
    2. 无论何时使用 layout_weight 参数,您都应提供“layout_height = match_parent”和“layout_width = match_parent”。
    3. 只需更改 layout_height = match_parent 并运行应用程序,它就可以正常工作了。

    谢谢

    【讨论】:

      【解决方案3】:

      我发现我以错误的方式夸大了我的视图,这就是忽略 xml 的原因。这篇文章描述了我的问题: https://possiblemobile.com/2013/05/layout-inflation-as-intended/

      我是这样做的:

      view = p1 ?: LayoutInflater.from(context).inflate(R.layout.ticket_grid,null)
      

      如果根为空,只需添加根:

      override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
      view = p1 ?: LayoutInflater.from(context).inflate(R.layout.ticket_grid, p2, false)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多