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"
将每个<Button>
包裹在另一个<LinearLayout>
中,并在<Button>
之前的每个<LinearLayout>
中也放置一个<ImageView>
。像这样的:
<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>
您可能希望在 ImageView
和 Button
之间添加一些边距或填充。
【讨论】:
【参考方案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 中的按钮不显示
QT修改mainwindow前的图标,在资源管理器上显示图标也改变