将按钮+图像+文本对齐成一行 (android)

Aligning buttons+images+text in a row (android)

我正在尝试将 3 个按钮排列在屏幕中央的一行中。每个按钮都有背景颜色、图像和图像下方的一些文本。我试过使用 LinearLayout 但我无法将图像放在按钮上。我试过 RelativeLayout,我设法让它们排成一排,但它们不在屏幕中央。有什么建议吗?

    <Button
    android:id="@+id/start"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="85dp"
    android:paddingBottom="10dp"
    android:paddingLeft="25dp"
    android:paddingRight="25dp"
    android:background="@drawable/light"
    android:text="@string/start"
    android:textColor="@color/text"
    android:textSize="8pt"
    android:textStyle="bold"
    android:layout_marginTop="0dp"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_alignParentTop="true" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/image"
    android:src="@drawable/hstart"
    android:layout_alignLeft="@+id/start"
    android:layout_alignStart="@+id/start"
    android:layout_alignRight="@+id/start"
    android:layout_alignEnd="@+id/start"
    android:layout_marginRight="20dp"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="0dp" />

使用 LinearLayout 为每个 button/image 组合保存一个 RelativeLayout。 "Nested" 布局很常见,可以获得这种视觉效果。

这是您的按钮视图(your_btn_view.xml 在布局文件夹中):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:clickable="true"
    android:background="@android:drawable/btn_default"
    android:gravity="center" >

    <ImageView
        android:id="@+id/btn_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_add" />

    <TextView
        android:id="@+id/btn_tv"
        android:text="text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

这是包含三个按钮的布局视图:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <include
        android:id="@+id/btn1"
        layout="@layout/your_btn_view" />

    <include
        android:id="@+id/btn2"
        layout="@layout/your_btn_view" />

    <include
        android:id="@+id/btn3"
        layout="@layout/your_btn_view" />

</LinearLayout>

然后,在您的 onCreate() 中访问并填写适当的 TextViewImageView,如下所示:

@Override
public void onCreate(Bundle sIS){
    super.onCreate(sIS);
    setContentView(R.layout.that_layout_above, this, false);

    LinearLayout btn1 = (LinearLayout)findViewById(R.id.btn1);

    ((TextView)btn1.findViewById(R.id.btn_tv)).setText("my text");
    ...