代码之家  ›  专栏  ›  技术社区  ›  Gold.strike

使用自定义样式管理过滤器的最佳方法

  •  0
  • Gold.strike  · 技术社区  · 4 年前

    我在安卓应用程序上工作,我需要根据应用程序设计指南实施过滤器。

    有两种过滤器:

    • 带有图标
    • 没有图标

    可以选择/取消选择过滤器(或选中/取消选中)

    每个案例都可以在此处看到:

    Filters styles

    这些过滤器将通过 GridView 由几行上的3列组成。

    我想知道哪个本机控件更适合实现这一点?

    我试着用 Chip ,它有一个 checked 参数,但似乎无法更改 chipIcon 位置

    我也试过 Button ,它允许使用更改图标位置 app:iconGravity ,但没有 选中的 参数

    我也见过 ToggleButtons 但它需要使用 MaterialButtonToggleGroup ,而我需要通过 GridView .

    所以我需要创建一个自定义控件来实现这一点吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Cheticamp    4 年前

    你可以用 ToggleButton

    <ToggleButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/background_selector"
        android:checked="false"
        android:drawableTop="@drawable/car"
        android:drawablePadding="8dp"
        android:drawableTint="@drawable/icon_text_colors"
        android:padding="8dp"
        android:textColor="@drawable/icon_text_colors"
        android:textOff="Car wash"
        android:textOn="Car wash"
        android:textSize="14sp" /> 
    

    哪里 背景选择器。xml 是

    <selector>
        <item android:drawable="@android:color/darker_gray" android:state_checked="true"/>
        <item android:drawable="@android:color/holo_blue_light" />
    </selector>
    

    和 图标\文本\颜色。xml 看起来像这样:

    <selector>
        <item android:color="@android:color/white" android:state_checked="true"/>
        <item android:color="@android:color/black" android:state_checked="false"/>
    </selector>
    

    未经检查的状态如下所示:

    enter image description here

    而选中状态如下所示:

    enter image description here

    对于没有图标的按钮,您根本不会为顶部指定可绘制的图标。

    这些不是你想要的颜色,但这就是想法。

        2
  •  0
  •   Gold.strike    4 年前

    我终于通过一个 MaterialButton 还有 android:checkable 财产:

    <?xml version="1.0" encoding="utf-8"?>
    <com.google.android.material.button.MaterialButton
        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:id="@+id/CheackableCell"    
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:icon="@drawable/ic_carwash"
        app:iconGravity="textTop"
        app:iconPadding="12dp"
        tools:text="Car Wash"
        android:textAlignment="gravity"
        android:gravity="top|center"
        android:paddingBottom="4dp"
        android:checkable="true"/>
    

    这与切蒂坎普给出的解决方案非常接近。