如何在Android中自定义切换按钮?

问题描述

我一直在尝试自定义切换按钮,使其看起来像这样,但似乎我什么都没得到。

enter image description here

任何人都可以给我一个想法或任何有关设计的教程吗?

解决方法

是您要找的东西吗?

Notebook

首先创建一个ToggleButton XML:

<ToggleButton
    android:id="@+id/follow"
    android:layout_width="120dp"
    android:layout_height="35dp"
    android:layout_centerInParent="true"
    android:background="#61849f"
    android:checked="false"
    android:drawableStart="@drawable/ic_baseline_star_24"
    android:elevation="0dp"
    android:gravity="center"
    android:padding="8dp"
    android:textColor="#fff"
    android:textOff=" FOLLOW "
    android:textOn=" FOLLOWING " />

Java:

toggleButton = findViewById(R.id.follow);
        toggleButton.setOnCheckedChangeListener((buttonView,isChecked) -> {
            if (isChecked) setUnfollow();
            else setFollow();
        });

setFollowsetUnfollow方法:

private void setUnfollow() {
    toggleButton.setChecked(true);
    toggleButton.setTextColor(Color.BLACK);
    toggleButton.setBackgroundColor(Color.WHITE);
    toggleButton.setCompoundDrawablesWithIntrinsicBounds(0,0);
    toggleButton.setBackgroundDrawable(ContextCompat.getDrawable(this,R.drawable.border));

}

private void setFollow() {
    toggleButton.setChecked(false);
    toggleButton.setTextColor(Color.WHITE);
    toggleButton.setBackgroundDrawable(ContextCompat.getDrawable(this,R.drawable.fill));
    toggleButton.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_baseline_star_24,0);
}

最后,fill.XML和bordre.XML(在drawable文件夹中创建这些文件)

Border.XML:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke
        android:width="1dp"
        android:color="#61849f" />
</shape>

Fill.XML

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="#61849f" />
</shape>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...