在 ChipGroup (Android) 中添加垂直分隔线

Posted

技术标签:

【中文标题】在 ChipGroup (Android) 中添加垂直分隔线【英文标题】:Adding Vertical divider in ChipGroup (Android) 【发布时间】:2022-01-23 19:25:41 【问题描述】:

我试图在芯片组中添加一个垂直分隔线,以将主芯片与其他芯片分开。就像 YouTube 一样:

我已尝试通过此方法添加它。在活动中:

<HorizontalScrollView
    android:id="@+id/hscroll_categories"
    android:layout_
    android:layout_
    android:layout_marginTop="5dp"
    android:layout_marginBottom="10dp"
    android:scrollbars="none">
    <com.google.android.material.chip.ChipGroup
        android:id="@+id/chipgroup_categories"
        android:layout_
        android:layout_
        android:padding="8dp"
        android:orientation="horizontal"
        app:singleSelection="true"
        app:selectionRequired="true"
        app:singleLine="true" />
</HorizontalScrollView>

item_chip_category.xml:

<com.google.android.material.chip.Chip xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    android:gravity="center"
    app:chipStartPadding="18dp"
    app:chipEndPadding="18dp"
    app:chipMinHeight="40dp"
    android:textColor="@color/txt_category_chip_light"
    app:chipBackgroundColor="@color/bg_category_chip_light"
    app:chipStrokeWidth="1dp"
    app:chipStrokeColor="@color/stroke_category_chip_light"
    style="@style/Widget.MaterialComponents.Chip.Choice"
    android:textAppearance="?android:attr/textAppearance" />

vertical_div.xml:

<View xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="#424242"/>

并动态添加筹码和分频器:

Chip chip = (Chip) this.getLayoutInflater().inflate(R.layout.item_chip_category, null, false);

LinearLayout.LayoutParams layoutParams= new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(5,5,5,5);
chip.setLayoutParams(layoutParams);
chip.setText(some_var);

//adding chip
chipgroup_categories.addView(chip);

//adding divider
View div = (View) this.getLayoutInflater().inflate(R.layout.vertical_div, null, false);
chipgroup_categories.addView(div);

//adding more chips using loop

输出:

在输出中,没有行,只有空格,我错过了什么吗?任何帮助找到添加它的有效方法表示赞赏。

【问题讨论】:

我同意 Zain 关于芯片组的使用。如果您想继续现有的,请尝试将调用的第二个参数设置为带有芯片组的充气机,以指定线的高度。如果您对现在发生的事情感到好奇,请使用 AS Layout Inspector 查看布局。 【参考方案1】:

我试图在芯片组中添加一个垂直分隔线来分隔主要 来自其他芯片的芯片。就像 YouTube:

ChipGroup 应该只包含芯片元素;探索按钮和垂直线不应该是芯片元素。

因此,您可以使用水平的LinearLayout 简化它:探索按钮、垂直线、ChipGroup,以及可选的包裹在HorizontalScrollView 中的“发送反馈”按钮,如 YouTube:

<?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"
    android:layout_
    android:layout_>

    <HorizontalScrollView
        android:id="@+id/horizontal_scroll"
        android:layout_
        android:layout_
        android:background="#212121"
        android:overScrollMode="never"
        android:scrollbars="none"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:layout_
            android:layout_
            android:gravity="center"
            android:orientation="horizontal">

            <Button
                android:id="@+id/btn_explore"
                android:layout_
                android:layout_
                android:layout_marginStart="8dp"
                android:layout_marginLeft="8dp"
                android:backgroundTint="#373737"
                android:drawableLeft="@drawable/ic_baseline_explore_24"
                android:drawableTint="#fff"
                android:text="Explore" />

            <View
                android:id="@+id/vertical_line"
                android:layout_
                android:layout_
                android:layout_marginHorizontal="16dp"
                android:background="#424242" />

            <com.google.android.material.chip.ChipGroup
                android:id="@+id/chipgroup"
                android:layout_
                android:layout_
                android:padding="10dp"
                app:chipSpacing="16dp"
                app:chipSpacingHorizontal="40dp"
                app:chipSpacingVertical="4dp"
                app:singleLine="true"
                app:singleSelection="true"/>

            <TextView
                android:id="@+id/btn_end"
                android:layout_
                android:layout_
                android:layout_marginHorizontal="8dp"
                android:text="SEND FEEDBACK"
                android:textColor="#2AA9E3"
                android:textSize="16sp" />

        </LinearLayout>
    </HorizontalScrollView>


</androidx.constraintlayout.widget.ConstraintLayout>

并以编程方式将芯片添加到 ChipGroup,这是一个演示:

ChipGroup chipGroup = findViewById(R.id.chipgroup);

String[] chipArr = new String[]"Arabic", "English", "Hindu", "German", "French", "Italian", "Urdu", "Spanish";

for (String text : chipArr) 
    Chip chip = new Chip(this);
    chip.setLayoutParams(new LinearLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT));
    chip.setText(text);
    chipGroup.addView(chip);



for (Chip chip : chips) chipGroup.addView(chip);

【讨论】:

或者另一种方法可能是将芯片宽度设置为 1 或其他值,然后禁用它。

以上是关于在 ChipGroup (Android) 中添加垂直分隔线的主要内容,如果未能解决你的问题,请参考以下文章

无法在芯片中添加图标

使用 Onclick 侦听器将选定的 ChipGroup 芯片文本放入剪贴板

在 MaterialCardView 的边框上绘制 ChipGroup 内的 Chip

排列 listView 或 recyclerView 项目,如chipGroup

android MD风格组件(BottomNavigationView,配合lottie使用)

android MD 日期选择器,时间选择器