LinearLayout 中按钮前的图标

Posted

技术标签:

【中文标题】LinearLayout 中按钮前的图标【英文标题】:Icons before buttons in LinearLayout 【发布时间】:2021-03-16 22:29:59 【问题描述】:

如何使用 ImageView 在 LinearLayout 上的按钮前面放置图标?为了清楚起见,我附上了 android 活动 xml 代码和应用程​​序外观的屏幕截图。请帮我!如果有知识的人提供任何信息,我将不胜感激

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MainActivity"
    android:orientation="horizontal"
    android:background="#00a89b">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true">

        <Button
            android:id="@+id/button1"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON1" />

        <Button
            android:id="@+id/button2"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON2" />

        <Button
            android:id="@+id/button3"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON3" />

        <Button
            android:id="@+id/button4"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON4" />

        <Button
            android:id="@+id/button5"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON5" />

        <Button
            android:id="@+id/button6"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON6" />

    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout

【应用外观】:https://i.stack.imgur.com/wcwvp.png

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点,但如果你想使用LinearLayout,你可以这样做:

orientation="horizontal" 将每个&lt;Button&gt; 包裹在另一个&lt;LinearLayout&gt; 中,并在&lt;Button&gt; 之前的每个&lt;LinearLayout&gt; 中也放置一个&lt;ImageView&gt;。像这样的:

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="vertical"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal">

        <ImageView
            android:layout_width=..."
            android:layout_
            .../>
            
        <Button
            android:id="@+id/button1"
            android:background="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON1" />
    </LinearLayout>

    <LinearLayout
        ...
    </LinearLayout>

您可能希望在 ImageViewButton 之间添加一些边距或填充。

【讨论】:

【参考方案2】:

您可以使用android:drawableLeft,而不是使用android:background

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MainActivity"
    android:orientation="horizontal"
    android:background="#00a89b">

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true">

        <Button
            android:id="@+id/button1"
            android:drawableLeft="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON1" />

        <Button
            android:id="@+id/button2"
            android:drawableLeft="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON2" />

        <Button
            android:id="@+id/button3"
            android:drawableLeft="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON3" />

        <Button
            android:id="@+id/button4"
            android:drawableLeft="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON4" />

        <Button
            android:id="@+id/button5"
            android:drawableLeft="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON5" />

        <Button
            android:id="@+id/button6"
            android:drawableLeft="@drawable/buttonshape"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:textColor="#000000"
            android:textSize="16sp"
            android:layout_marginBottom="15dp"
            android:text="BUTTON6" />

    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout

【讨论】:

【参考方案3】:

您想在按钮外显示图标,因此drawableLeft 将不是实现此目的的合适选项。您可以使用 ConstraintLayout 有效地完成您想要的设计,但正如您要求的那样,您可以通过 LinearLayout 来完成。所以这里是完整的解决方案。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="#00a89b"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="vertical">

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_
                android:layout_
                android:layout_marginEnd="15dp"
                android:src="@drawable/icon">

            </ImageView>

            <Button
                android:id="@+id/button1"
                android:layout_
                android:layout_
                android:background="@drawable/green_border"
                android:text="BUTTON1"
                android:textColor="#000000"
                android:textSize="16sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_
                android:layout_
                android:layout_marginEnd="15dp"
                android:src="@drawable/icon">

            </ImageView>

            <Button
                android:id="@+id/button2"
                android:layout_
                android:layout_
                android:background="@drawable/green_border"
                android:text="BUTTON2"
                android:textColor="#000000"
                android:textSize="16sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_
                android:layout_
                android:layout_marginEnd="15dp"
                android:src="@drawable/icon">

            </ImageView>

            <Button
                android:id="@+id/button3"
                android:layout_
                android:layout_
                android:background="@drawable/green_border"
                android:text="BUTTON3"
                android:textColor="#000000"
                android:textSize="16sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_
                android:layout_
                android:layout_marginEnd="15dp"
                android:src="@drawable/icon">

            </ImageView>

            <Button
                android:id="@+id/button4"
                android:layout_
                android:layout_
                android:background="@drawable/green_border"
                android:text="BUTTON4"
                android:textColor="#000000"
                android:textSize="16sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_
                android:layout_
                android:layout_marginEnd="15dp"
                android:src="@drawable/icon">

            </ImageView>

            <Button
                android:id="@+id/button5"
                android:layout_
                android:layout_
                android:background="@drawable/green_border"
                android:text="BUTTON5"
                android:textColor="#000000"
                android:textSize="16sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:layout_marginTop="15dp"
            android:layout_marginBottom="15dp"
            android:orientation="horizontal">

            <ImageView
                android:layout_
                android:layout_
                android:layout_marginEnd="15dp"
                android:src="@drawable/icon">

            </ImageView>

            <Button
                android:id="@+id/button6"
                android:layout_
                android:layout_
                android:background="@drawable/green_border"
                android:text="BUTTON6"
                android:textColor="#000000"
                android:textSize="16sp" />
        </LinearLayout>

    </LinearLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

以上是关于LinearLayout 中按钮前的图标的主要内容,如果未能解决你的问题,请参考以下文章

Android - 嵌套 LinearLayout 中的按钮不显示

如何仅指定一次 LinearLayout 元素之间的间距?

QT修改mainwindow前的图标,在资源管理器上显示图标也改变

游戏得有活动的场景:代码中多行多列的LinearLayout布局

案例 HTML5 SVG图标按钮菜单特效

微信小程序开发,导航栏右边的按钮怎么设置?