【问题标题】:Android - restrict space to take match_parent and views on both sidesAndroid - 限制空间以获取 match_parent 和双方的视图
【发布时间】:2016-12-19 15:00:46
【问题描述】:

我有一个水平线性布局,包括一个 TextView、一个 EditText 和另一个 EditText。 两个 TextView 的宽度和高度都设置为 wrap_content。 EditText 的高度为 wrap_content,宽度为 match_parent。

我的目标是将这三个视图放在一行中,填满整行。 但是通过上面的书面设置,我让第一个 TextView 占用了所需的空间,而 EditText 填充了其余的空间,而不是为另一个 TextView 保留可用空间。

我通过将 TextViews 的 layout_weight 设置为 0 并将 EditText 设置为 500 来实现临时解决方案,我确信这不是真正的解决方案。

编辑:当前布局:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/linearLayoutWeight"
    android:orientation="horizontal">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gewicht:"
        android:id="@+id/lblWeight"
        android:layout_alignParentStart="true"
        android:textColor="@color/mainForeground"
        android:textSize="24dp"
        android:layout_weight="1"
        android:textStyle="bold" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtWeight"
        android:layout_alignBottom="@+id/textView"
        android:layout_toEndOf="@+id/textView"
        android:textAlignment="center"
        android:hint="60"
        android:textSize="24dp"
        android:textColor="@color/mainForeground"
        android:textColorHint="@color/hintColor"

        android:layout_weight="500"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/lblUnitWeight"
        android:textColor="@color/mainForeground"
        android:textSize="24dp"
        android:layout_weight="1"
        android:text="g." />
</LinearLayout>

【问题讨论】:

  • 您是否试图避免layout_weight 属性?因为你已经在使用它了。您想在上面更改什么?

标签: java android xml layout


【解决方案1】:

使用 layout_weight 确定每个视图的宽度。根据您的需要更新重量值。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/linearLayoutWeight"
    android:orientation="horizontal">
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:text="Gewicht:"
        android:id="@+id/lblWeight"
        android:layout_alignParentStart="true"
        android:textColor="@color/mainForeground"
        android:textSize="24dp"
        android:layout_weight="1"
        android:textStyle="bold" />

    <EditText
        android:layout_width="0dp"
        android:layout_weight="2"
        android:layout_height="wrap_content"
        android:id="@+id/txtWeight"
        android:layout_alignBottom="@+id/textView"
        android:layout_toEndOf="@+id/textView"
        android:textAlignment="center"
        android:hint="60"
        android:textSize="24dp"
        android:textColor="@color/mainForeground"
        android:textColorHint="@color/hintColor"

        android:layout_weight="500"/>
    <TextView
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:id="@+id/lblUnitWeight"
        android:textColor="@color/mainForeground"
        android:textSize="24dp"
        android:layout_weight="1"
        android:text="g." />
</LinearLayout>

【讨论】:

  • 谢谢!所以我认为我缺少的是将宽度设置为 0dp。
  • 但我还是有些困惑。我希望布局使用全宽,如果我将 EditText 的权重设置为更高的值,它会将第一个 TextView 移动为使用 2 行。
  • 您可以对每个视图使用 android:ems 属性,使其宽度至少具有最小尺寸。
【解决方案2】:

我有点迷茫,但这就是你想要的吗?

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/leftTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <EditText
        android:id="@+id/editText"
        android:layout_toEndOf="@+id/leftTextView"
        android:layout_toStartOf="@+id/rightTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content/>

    <TextView
        android:id="@+id/rightTextView"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>

试试这个,应该可以的。

【讨论】:

  • 小改动:当您第一次引用视图时,您只需要 @+/id 中的 +
  • 谢谢,这似乎可行,但现在,edittext 比 textviews 低一点。怎么解决?
  • 我认为LinearLayout 更适合所需的设计。
  • 您可以将 centerInVertical="true" 添加到每个子视图中
  • @MaskedMan 我也是这么想的。但是用这种方法,我不能让它在没有换行符的情况下全宽工作。
【解决方案3】:

你可以用这个:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/linearLayoutWeight"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gewicht:"
        android:id="@+id/lblWeight"
        android:layout_alignParentStart="true"
        android:textColor="@color/mainForeground"
        android:textSize="24dp"
        android:textStyle="bold" />

    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:id="@+id/txtWeight"
        android:layout_alignBottom="@+id/textView"
        android:layout_toEndOf="@+id/textView"
        android:textAlignment="center"
        android:hint="60"
        android:textSize="24dp"
        android:textColor="@color/mainForeground"
        android:textColorHint="@color/hintColor"
        android:layout_weight="500"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/lblUnitWeight"
        android:textColor="@color/mainForeground"
        android:textSize="24dp"
        android:text="g." />

</LinearLayout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2011-06-10
    • 2017-09-18
    • 2013-06-28
    • 1970-01-01
    相关资源
    最近更新 更多