LinearLayout改变大小

时间:2018-06-14 14:53:20

标签: android gridview layout height

我使用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" />

3 个答案:

答案 0 :(得分:1)

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

同时检查

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

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

sp - 与比例无关的像素,专门用于文字大小。这是一个与密度无关的单元,但是单个sp的物理尺寸在每个屏幕密度上仅大致相同。缩放因子(取决于设备的密度桶)以及用户的文本大小首选项,用于将sp转换为160 dpi的像素数。此转换的像素数取决于屏幕密度和设备所属的密度桶。

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

答案 1 :(得分:0)

  1. 这里,您为所有三个元素使用了“layout_weight”参数,并提供“layout_height”为0dp。错了。
  2. 每当你使用layout_weight参数时,你应该提供“layout_height = match_parent”和“layout_width = match_parent”。
  3. 只需更改layout_height = match_parent并运行应用程序,它就能正常运行。
  4. 谢谢

答案 2 :(得分:0)

我发现我以错误的方式夸大了我的观点,这就是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)
}