تفاوت Switch, SwitchCompat, SwitchMaterial و چه طور کاستومایز کنیم

چند روز پیش روی یه پروژه ای کار می کردم که چندتا Switch داشت و با توجه به دیزاین نیاز بود که Switch هارو کاستوم کنم.

پروژه از api 17 شروع میشد و من از switch معمولی استفاده کرده بودم غافل از اینکه روی pre-lollipop ها بهم میریزه و با یه کم سرچ متوجه شدم باید از SwitchCompat یا SwitchMaterial استفاده کنم.

و دلیلش هم اینه که Switch در pre-lollipop ها یعنی api 21 یا اندروید 5.0 از holo styles ارث بری می کنه و برای بالاتر از اون از material design styles

ولی SwitchCompat در تمام ورژن ها از material design styles ارث بری می کنه و یک شرط هم داره که Activity شما باید AppCompat باشه

برای اینکه تفاوت ها رو بهتر متوجه بشید کد و تصویر رو در ادامه ببینید، لطفاً به namespace های track و thumb هم توجه کنید.

api19
api19


api27
api27


<?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_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="normal switch"
        app:[email protected]+id/normalSwitch"
        app:[email protected]+id/normalSwitch"
        app:[email protected]+id/normalSwitch" />

    <Switch
        android:[email protected]+id/normalSwitch"
        app:[email protected]+id/compatSwitch"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:showText="false"
        android:[email protected]/switchbg_state"
        android:[email protected]/switch_thumb"
        android:layout_marginBottom="64dp"
        android:layout_width="55dp"
        android:layout_height="30dp"/>


    <TextView
        android:[email protected]+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="compat switch"
        app:[email protected]+id/compatSwitch"
        app:[email protected]+id/compatSwitch"
        app:[email protected]+id/compatSwitch" />

    <androidx.appcompat.widget.SwitchCompat
        android:[email protected]+id/compatSwitch"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:showText="false"
        app:[email protected]/switchbg_state"
        android:[email protected]/switch_thumb"
        android:layout_marginTop="64dp"
        android:layout_width="55dp"
        android:layout_height="30dp"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="material switch"
        app:[email protected]+id/materialSwitch"
        app:[email protected]+id/materialSwitch"
        app:[email protected]+id/materialSwitch" />

    <com.google.android.material.switchmaterial.SwitchMaterial
        android:[email protected]+id/materialSwitch"
        app:[email protected]+id/compatSwitch"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:showText="false"
        app:[email protected]/switchbg_state"
        android:[email protected]/switch_thumb"
        android:layout_marginTop="64dp"
        android:layout_width="55dp"
        android:layout_height="30dp"/>


</androidx.constraintlayout.widget.ConstraintLayout>