微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Monzo 风格切换按钮设计

如何解决Android Monzo 风格切换按钮设计

我正在尝试在我的 Android 应用程序中创建 Monzo (Android) 样式开关。我设法通过 Thumb 和 Track 的自定义 drawable 非常接近地创建它,但仍然不一样。

仍然缺少的东西:

  1. 我给了顶部和底部填充,但仍然没有显示填充。 Thumb and Track drawable 中没有 Margin 选项。
  2. 在 Monzo 应用程序中,两个名称显示,但在我的情况下,名称仅基于打开/关闭显示

我附上了两个截图 - 来自 Monzo 应用程序和我的测试应用程序。我还附上了我的 Thumb & Track 可绘制代码

有人可以建议我如何实现相同的设计。如果 Switch 不是正确的组件,那么我可以使用哪个其他组件。

蒙佐:

Monzo

我的应用:

enter image description here

拇指可绘制代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <size android:width="160dp"/>
            <corners android:radius="20dp"/>
        </shape>
    </item>
    <item android:state_checked="false">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <size android:width="160dp"/>
            <corners android:radius="20dp"/>
        </shape>
    </item>
</selector>

跟踪可绘制代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/darker_gray"/>
            <size android:height="40dp"/>
            <corners android:radius="20dp"/>
            <padding android:top="10dp"
                android:right="10dp"
                android:bottom="10dp"
                android:left="10dp"/>
        </shape>
    </item>
    <item android:state_checked="false">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/darker_gray"/>
            <size android:height="40dp"/>
            <corners android:radius="20dp"/>
            <padding android:top="10dp"
                    android:right="10dp"
                    android:bottom="10dp"
                    android:left="10dp"/>
        </shape>
    </item>
</selector>

解决方法

试试下面的代码:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:orientation="horizontal"
    android:background="@drawable/bg_track">
    <LinearLayout
        android:id="@+id/llFeed"
        android:layout_weight=".5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_thumb"
        android:orientation="horizontal"
        android:gravity="center"
        android:paddingTop="10dp"
        android:paddingBottom="10dp">
        <TextView
            android:id="@+id/tvFeed"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Feed"
            android:textSize="14sp"/>
    </LinearLayout>
    <LinearLayout
        android:id="@+id/llManage"
        android:layout_weight=".5"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:paddingTop="10dp"
        android:paddingBottom="10dp">
        <TextView
            android:id="@+id/tvManage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Manage"
            android:textSize="14sp"
            android:textColor="@color/white"/>
    </LinearLayout>
</LinearLayout>

以上输出:

enter image description here

,

实际上,我可以通过为与“Track”颜色相同的“Thumb”设置“Stroke”来解决这个问题。下一个问题是它没有在轨道侧显示文本......意味着当开关关闭时,另一侧没有文本。 我解决这个问题的方法是创建 2 个标签并将它们限制在 Switch 之上,并且我将 Switch On Off 文本保留为空“”。

拇指代码:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <size android:width="160dp"/>
            <corners android:radius="20dp"/>
            <stroke android:color="@color/lightGray"
                android:width="5dp"/>
        </shape>
    </item>
    <item android:state_checked="false">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <size android:width="160dp"/>
            <corners android:radius="20dp"/>
            <stroke android:color="@color/lightGray"
                android:width="5dp"/>
        </shape>
    </item>
</selector>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。