Android自定义按钮

Bog*_*dan 5 layout android shape

我在android中创建自定义按钮但想避免重复.

我正在尝试创建2个可切换的按钮,这些按钮共享相同的设计但是不同的图像图标而不是文本.

目前我有这个:

在此输入图像描述

我正在使用此xml作为可绘制资源:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <item>
        <shape>
            <padding
                android:bottom="5dp"
                android:left="5dp"
                android:right="5dp"
                android:top="5dp" />
            <corners android:radius="20dp"/>
        </shape>
    </item>

    <item>
        <shape>
            <padding
                android:bottom="5dp"
                android:left="-5dp"
                android:right="5dp"
                android:top="-5dp" />

            <solid android:color="#edebeb"></solid>

            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item>
        <shape>
            <size android:height="150dp" android:width="150dp"></size>
            <padding
                android:bottom="5dp"
                android:left="-5dp"
                android:right="5dp"
                android:top="-5dp" />

            <solid android:color="#fff"></solid>

            <corners android:radius="20dp"/>
        </shape>
    </item>

</layer-list>
Run Code Online (Sandbox Code Playgroud)

如何在不复制xml文件的情况下在每个按钮的中心显示不同的图像?

有没有什么办法可以将值传递给我活动的.java文件中的每个按钮,以便我可以使用它为每个按钮显示不同的图像?

Nic*_*oso 2

如果您使用 anImageView那么您可以将图标设置为src并仍然使用您的可绘制对象作为背景:

 <ImageView ...
    android:src="@drawable/ic_whatever"
    android:background="@drawable/background" />
Run Code Online (Sandbox Code Playgroud)

所有视图都支持 onClick,因此它仍然可以充当按钮。或者,您可以嵌套可绘制对象,这样您就可以为每个不同的按钮样式提供以下内容:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <item android:drawable="@drawable/ic_whatever" />
    <item android:drawable="@drawable/background" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)

我上面建议的 java 版本(来自Activity):

public void onCreate(...) {
    ...
    ((ImageView) findViewById(R.id.my_button)).setImageResource(R.drawable.ic_whatver);
}
Run Code Online (Sandbox Code Playgroud)