Android 布局 - 如何使控件显示在 left/right 上而没有填充?

Android layout - How to make the controls appear to the left/right without padding?

我在屏幕上定义了 3 个控件,按以下顺序放置: 按钮 - 文本视图 - 按钮

我想把第一个按钮放在左边,把textView放在中间。第二个按钮应该在右边。

但是,我找不到一种方法来强制按钮粘在 left/right 一侧,而 textView 也粘在中间。

这是代码:

 <LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="&lt;&lt;"
        android:id="@+id/button2" />

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/TodayDataTextView"
    android:text="Today Data"
    android:textAlignment="center"
    android:textColor="#0000ff"
    android:background="#00000000"
    android:layout_margin="5dp"
    android:textSize="20dp"
    android:textStyle="bold|italic" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=">>"
        android:id="@+id/button" />

</LinearLayout>

这是屏幕截图:

这就是我想要的(没有填充):

将所有三个小部件的布局重力和重力分别设置为左、中和右

你可以试试RelativeLayout。像这样:

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

        <Button
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="&lt;&lt;"
            android:layout_alignParentLeft="true"
            android:id="@+id/button2" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/TodayDataTextView"
            android:text="Today Data"
            android:textAlignment="center"
            android:layout_centerHorizontal="true"
            android:textColor="#0000ff"
            android:background="#00000000"
            android:layout_margin="5dp"
            android:textSize="20dp"
            android:textStyle="bold|italic" />

        <Button
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=">>"
            android:layout_alignParentRight="true"
            android:id="@+id/button" />

    </RelativeLayout>

试试这个代码:

<RelativeLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="&lt;&lt;"
    android:id="@+id/button2"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/TodayDataTextView"
    android:gravity="center_vertical"
    android:text="Today Data"
    android:textAlignment="center"
    android:textColor="#0000ff"
    android:background="#00000000"
    android:textSize="20dp"
    android:textStyle="bold|italic"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=">>"
    android:id="@+id/button"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

输出:

  1. 请使用相对布局而不是线性布局。
  2. 添加到按钮

    android:layout_alignParentLeft="true"

    android:layout_centerVertical="true"

  3. 添加到 TextView

    android:layout_centerHorizontal="true"

    android:layout_centerVertical="true"

  4. 添加到右按钮

    android:layout_alignParentRight="true"

    android:layout_centerVertical="true"

您可以使用布局权重来准确获得您要查找的内容:

<Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="&lt;&lt;"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Today Data"
        android:textAlignment="center"
        android:textStyle="bold|italic"
        />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="&lt;&lt;"
        android:id="@+id/button"
        />

请记住,Android 在确定布局中组件的大小和位置时会进行两次传递。第一遍使用 layout_widthlayout_height 设置。在这种情况下,大多数小部件都是 wrap_content,这将使它们的 "natural" 大小适合其内容。第二遍使用 layout_weight 属性分配任何剩余像素。鉴于这是一个水平线性布局,这些像素将分配给小部件的水平尺寸。只有 TextView 指定了权重属性,因此它将获得 100% 的剩余像素。

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

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.20"
        android:gravity="left">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="<<" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="0.60"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="data"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.20"
        android:gravity="right">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="<<" />
    </LinearLayout>
</LinearLayout>

这也有效

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="0sp"
        android:layout_weight="1"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:text="&lt;&lt;"
        android:id="@+id/button2" />


    <TextView
        android:layout_width="0sp"
        android:layout_weight="3"
        android:layout_height="wrap_content"
        android:id="@+id/TodayDataTextView"
        android:text="Today Data"
        android:textAlignment="center"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="#0000ff"
        android:background="#00000000"
        android:layout_margin="5dp"
        android:textSize="20dp"
        android:textStyle="bold|italic" />

        <Button
            style="?android:attr/buttonStyleSmall"
            android:layout_width="0sp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_marginRight="15dp"
            android:text=">>"
            android:id="@+id/button" />

</LinearLayout>