动态向芯片组添加芯片

20

我正在尝试动态地向芯片组中添加多个芯片。第一个芯片看起来很好,但其他芯片没有正确显示。但是,如果我使用 XML 进行操作,则一切正常。

最后添加的芯片很小、灰色,并且没有文本。它应该像前三个一样为橙色并包含文本。

activity_main.xml

<HorizontalScrollView
            android:layout_width="350dp"
            android:layout_height="wrap_content"
            android:scrollbars="none"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/chips_select"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView"
            app:layout_constraintVertical_bias="0.51">
    <com.google.android.material.chip.ChipGroup
                android:id="@+id/chip_group_main"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginTop="2dp"
                app:chipSpacingHorizontal="4dp">
        <com.google.android.material.chip.Chip
                    style="@style/ChipTextAppearance"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Hello"
                    app:chipBackgroundColor="@color/colorAccent"
                    app:closeIconEnabled="true" />
        <com.google.android.material.chip.Chip
                    style="@style/ChipTextAppearance"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="World"
                    app:chipBackgroundColor="@color/colorAccent"
                    app:closeIconEnabled="true" />
    </com.google.android.material.chip.ChipGroup>
</HorizontalScrollView>

在MainActivity.java文件中

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  Chip chip = new Chip(this);
  chip.setText("ABC");
  chip.setChipBackgroundColorResource(R.color.colorAccent);
  chip.setCloseIconVisible(true);
  chip.setTextColor(getResources().getColor(R.color.white));
  chip.setTextAppearance(R.style.ChipTextAppearance);

  Chip chip2 = new Chip(this);
  chip.setText("XYZ");
  chip.setChipBackgroundColorResource(R.color.colorAccent);
  chip.setCloseIconVisible(true);
  chip.setTextColor(getResources().getColor(R.color.white));
  chip.setTextAppearance(R.style.ChipTextAppearance);

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

  chipGroup.addView(chip);
  chipGroup.addView(chip2);
}

样式文件.xml

<resources>
    <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="ChipTextAppearance" parent="TextAppearance.MaterialComponents.Chip">
        <item name="android:textColor">@android:color/white</item>
        <item name="android:textSize">12sp</item>
    </style>
</resources>

独立芯片.xml

<?xml version="1.0" encoding="utf-8"?>
<chip
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:chipBackgroundColor="@color/colorAccent"
    app:closeIconEnabled="true"
    style="@style/ChipTextAppearance"
    app:closeIconTint="@android:color/white" />
3个回答

26

在你的主活动中,你正在这样做。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Chip chip = new Chip(this);
        chip.setText("ABC");
        chip.setChipBackgroundColorResource(R.color.colorAccent);
        chip.setCloseIconVisible(true);
        chip.setTextColor(getResources().getColor(R.color.white));
        chip.setTextAppearance(R.style.ChipTextAppearance);

        Chip chip2 = new Chip(this);
        chip.setText("XYZ");
        chip.setChipBackgroundColorResource(R.color.colorAccent);
        chip.setCloseIconVisible(true);
        chip.setTextColor(getResources().getColor(R.color.white));
        chip.setTextAppearance(R.style.ChipTextAppearance);


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

        chipGroup.addView(chip);
        chipGroup.addView(chip2);

请注意,您正在创建一个新的芯片实例,即chip2,但在接下来的几行中,您正在更改chip而不是chip2实例,因此之前所做的任何更改都不会影响chip2。为了解决这个问题,请像这样更改您的代码

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);


            Chip chip = new Chip(this);
            chip.setText("ABC");
            chip.setChipBackgroundColorResource(R.color.colorAccent);
            chip.setCloseIconVisible(true);
            chip.setTextColor(getResources().getColor(R.color.white));
            chip.setTextAppearance(R.style.ChipTextAppearance);

            Chip chip2 = new Chip(this);
            chip2.setText("XYZ");  //chip2
            chip2.setChipBackgroundColorResource(R.color.colorAccent);
            chip2.setCloseIconVisible(true);
            chip2.setTextColor(getResources().getColor(R.color.white));
            chip2.setTextAppearance(R.style.ChipTextAppearance);


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

            chipGroup.addView(chip);
            chipGroup.addView(chip2);

10

可以使用 chipGroup.addView(chip);将芯片添加到组中。 请注意,为了使组的某些功能正常工作(例如singleSelection="true"),必须为每个芯片添加ID。

 chip.setId(ViewCompat.generateViewId());

7
在Kotlin中:
// add chip group dynamically
        item.itemData.projectTags.forEach { tagName ->
            binding.tagChipGroup.addView(createTagChip(context, tagName))
        }

// 创建一个单独的方法来使用属性创建芯片。

private fun createTagChip(context: Context, chipName: String): Chip {
    return Chip(context).apply {
        text = chipName
        setChipBackgroundColorResource(R.color.purple_500)
        isCloseIconVisible = true
        setTextColor(ContextCompat.getColor(context, R.color.white))
        setTextAppearance(R.style.ChipTextAppearance)
    }

}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接