简体   繁体   English

Android 芯片自定义高度或填充 - 芯片组间距

[英]Android Chip Custom Height Or Padding - Chipgroup spacing

Is there a way to change default material Chip vertical padding or height?有没有办法改变默认材料芯片垂直填充或高度? From the docs I see there surely is a way to set the minimal height, but I would like to make chips "thinner", like in this design:从我看到的文档中肯定有一种方法可以设置最小高度,但我想让芯片“更薄”,就像在这个设计中一样:

在此处输入图像描述

In the 1.1.0-alpha* versions extra spacing is added for the chip.在 1.1.0-alpha* 版本中,为芯片添加了额外的间距。 After a lot of hit and trial I managed to remove that spacing using:经过大量的尝试和试验后,我设法使用以下方法删除了该间距:

app:chipMinTouchTargetSize="0dp"

Looking at the class file for Chip, it seems that it's related to Android's minimum touch target size, so consider that before changing this.查看 Chip 的类文件,它似乎与 Android 的最小触摸目标大小有关,因此在更改之前请考虑这一点。

In order to make a Chip thinner, you need to adjust two properties: chip height and text size.为了使 Chip 更薄,您需要调整两个属性:chip height 和 text size。

<style name="ThinnerChip" parent="Widget.MaterialComponents.Chip.Action">
    <item name="chipCornerRadius">12dp</item>
    <item name="chipMinHeight">24dp</item>
    <item name="android:textAppearance">@style/SmallerText</item>
</style>

<style name="SmallerText" parent="TextAppearance.AppCompat.Small">
    <item name="android:textSize">11sp</item>
</style>

Then apply the style as ussually.然后像往常一样应用样式。

<com.google.android.material.chip.Chip
    style="@style/ThinnerChip"
    ...
    />

Belows are the Chip Attributes for padding.下面是用于填充的芯片属性。 Hopefully, It may help you希望,它可以帮助你

Paddings填充物

app:chipStartPadding
app:iconStartPadding
app:iconEndPadding
app:textStartPadding
app:textEndPadding
app:closeIconStartPadding
app:closeIconEndPadding
app:chipEndPadding

Fore more info: Click here更多信息:点击这里

You can use a custom style:您可以使用自定义样式:

  <style name="MaterialComponents_Chip_Thin" parent="@style/Widget.MaterialComponents.Chip.Entry">
    <item name="chipMinHeight">24dp</item>
    <item name="chipMinTouchTargetSize">24dp</item>
    <item name="chipIconSize">18dp</item>
    <item name="android:textAppearance">@style/TextAppearance.MaterialComponents.Body2_Thin</item>
    <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MaterialComponents.Chip_Thin</item>
  </style>
  <style name="ShapeAppearanceOverlay.MaterialComponents.Chip_Thin" parent="">
    <item name="cornerSize">12dp</item>
  </style>
  <style name="TextAppearance.MaterialComponents.Body2_Thin" parent="TextAppearance.MaterialComponents.Body2">
    <item name="android:textSize">12sp</item>
  </style>

And apply it with:并应用它:

    <com.google.android.material.chip.Chip
        style="@style/MaterialComponents_Chip_Thin"
        .../>

在此处输入图片说明

You have to set the height of your Chip to make it "thinner".您必须设置芯片的高度以使其“更薄”。
Check below code:检查以下代码:

build.gradle (app) build.gradle(应用程序)

implementation 'com.google.android.material:material:1.0.0-rc01'

ic_vector_android.xml ic_vector_android.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FFFFFF"
        android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/>
</vector>

your_layout.xml your_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#e3e3e3"
    android:orientation="vertical"
    android:padding="20dp">

    <com.google.android.material.chip.ChipGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:chipSpacing="18dp">

        <com.google.android.material.chip.Chip
            style="@style/Widget.MaterialComponents.Chip.Entry"
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:checkable="false"
            android:text="KRAKOW"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
            android:textColor="#636161"
            app:chipCornerRadius="10dp"
            app:chipIcon="@drawable/ic_vector_android"
            app:chipIconSize="14dp"
            app:chipIconTint="#636161"
            app:chipStartPadding="8dp"
            app:chipStrokeColor="#636161"
            app:chipStrokeWidth="1dp"
            app:closeIconEnabled="false" />

        <com.google.android.material.chip.Chip
            style="@style/Widget.MaterialComponents.Chip.Entry"
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:checkable="false"
            android:text="Today"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
            android:textColor="#ffffff"
            app:chipBackgroundColor="#636161"
            app:chipCornerRadius="10dp"
            app:closeIconEnabled="false" />

        <com.google.android.material.chip.Chip
            style="@style/Widget.MaterialComponents.Chip.Entry"
            android:layout_width="wrap_content"
            android:layout_height="20dp"
            android:checkable="false"
            android:text="Tomorrow"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
            android:textColor="#ffffff"
            app:chipBackgroundColor="#636161"
            app:chipCornerRadius="10dp"
            app:chipIcon="@drawable/ic_vector_android"
            app:chipIconSize="14dp"
            app:chipStartPadding="8dp"
            app:closeIconEnabled="false" />
    </com.google.android.material.chip.ChipGroup>
</LinearLayout>

To get the thinner Chip I have to set the following properties:为了获得更薄的芯片,我必须设置以下属性:

android:layout_height="20dp" // Thinner Height
app:chipIconSize="14dp"      // Smaller icon size
app:chipStartPadding="8dp"   // Add padding to start of icon
app:chipCornerRadius="10dp"  // Set Corner radius

Preview预习
在此处输入图片说明

There's a very straightforward way to achieve what I want: all I needed to do was to set the android:layout_height attribute on the ChipGroup enclosing my chips.有一种非常简单的方法可以实现我想要的:我需要做的就是在包含我的芯片的ChipGroup上设置android:layout_height属性。

I guess it makes sense that it's not possible to achieve that on a single chip... :>我想在单个芯片上不可能实现这一点是有道理的......:>

 //need or other way put parent ChipGroup LinearLayout and set h*W  
  //and  also width and height

 <com.google.android.material.chip.Chipandroid 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:layout_width="10dp" 
    android:layout_height="10dp" 
    app:mcv_textColor="@color/white" /> 

using java code :使用java代码:

int paddingDp = (int) TypedValue.applyDimension(
                TypedValue.COMPLEX_UNIT_DIP, 10,
                getResources().getDisplayMetrics()); 

        mChip.setPadding(paddingDp, 0, paddingDp, 0);

output :输出 :

筹码.png

If you add multiline Chip dynamically to ChipGroup until it expand to multiple rows, there is zero margin vertical margin.如果将多行 Chip 动态添加到 ChipGroup 直到它扩展为多行,则垂直边距为零。 Set app:chipSpacingVertical on ChipGroup to enable margin spacing.在 ChipGroup 上设置 app:chipSpacingVertical 以启用边距。

<com.google.android.material.chip.ChipGroup
    android:id="@+id/mainTagChipGroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:chipSpacingVertical="4dp"
    />

NOTE: You can set app:chipSpacingHorizontal or app:chipSpacing as well.注意:您也可以设置 app:chipSpacingHorizo​​ntal 或 app:chipSpacing。 NOTE: Strangely, default margin for static Chip defined in xml vs dynamic Chip added programatically is different.注意:奇怪的是,xml 中定义的静态芯片与以编程方式添加的动态芯片的默认边距是不同的。 I am using com.google.android.material:material:1.1.0-alpha04.我正在使用 com.google.android.material:material:1.1.0-alpha04。 NOTE: Setting layoutParams on Chip doesn't work.注意:在芯片上设置 layoutParams 不起作用。

Use setEnsureMinTouchTargetSize(false) to ensure the spacing is minimal.使用 setEnsureMinTouchTargetSize(false) 确保间距最小。

Chip chip = new Chip(getContext());
    chip.setId(selectedWordGroup.id);
    chip.setText(selectedWordGroup.getName());
    chip.setTag(i);
    chip.setCheckable(true);
    chip.setCheckedIconVisible(false);
    chip.setChecked((mFlashcardSetupActivity.allWordGroups.get(i).getSelected()));
    chip.setClickable(true);
    chip.setFocusable(true);
    chip.setEnsureMinTouchTargetSize(false);
    chip.setChipDrawable(ChipDrawable.createFromAttributes(getContext(), null, 0, R.style.CustomChipChoice));

    chip.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean selected) {
        }
    });
    mChipGroupGroups.addView(chip);




<com.google.android.material.chip.ChipGroup
                    android:id="@+id/chip_group_groups"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    card_view:chipSpacing="4dp"
                >

app:chipStartPadding="@dimen/_10sdp"

这为我删除了默认的垂直填充:

app:ensureMinTouchTargetSize="false"

use app:chipMinHeight="" property.使用 app:chipMinHeight="" 属性。

This is working for me这对我有用

app:chipSpacingVertical="-14dp"应用程序:chipSpacingVertical="-14dp"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM