【问题标题】:android-add top padding to Chip textandroid-将顶部填充添加到芯片文本
【发布时间】:2020-09-16 10:50:39
【问题描述】:

我在我的 Android 应用程序中使用来自 material 库的 Chip 组件。它是一个动作芯片,里面有一个图标和一个文字。关键是我需要在文本顶部添加一些填充,以便将其降低一点。

我尝试将textAppearance 样式添加到芯片中,但找不到任何样式项来满足我的需要。怎么办?!

        <com.google.android.material.chip.Chip
        android:id="@+id/chip"
        android:layout_width="wrap_content"
        app:chipIcon="@drawable/satisfied"
        app:chipIconTint="#444"
        android:layout_height="wrap_content"
        android:text="my text!"
        android:textAppearance="@style/Widget.App.Chip" />


    <style name="Widget.App.Chip" parent="Widget.MaterialComponents.Chip.Action">
    <item name="android:textSize">14dp</item>
    <item name="android:fontFamily">@font/xyz</item>
    <item name="android:textStyle">bold</item>
    // what item is needed to achieve top padding?!
    </style>

【问题讨论】:

    标签: android android-layout material-design android-chips


    【解决方案1】:

    简单地说:你不能。 Chip 按原样设计,它扩展了AppCompatCheckBox 和进一步的TextView(文档HERE)。所以左边和/或右边的这些图标是compound drawables,而不是分隔Views(例如ImageViews),所以你将设置为Chip的每个填充都会为文本和所有图标添加填充(因为这个是一个View)。出于您的目的,您必须创建自己的自定义View,最简单的方法可能是创建水平的LinearLayout 与孩子:TextViewImageViews 在它的左右两侧,然后你可以只为文字

    【讨论】:

    • 感谢您的解释。我可以扩展 Chip 类并添加我想要的填充吗?
    • 不,就像答案一样:您必须创建“自己的”Chip。扩展材料的Chip 不会改变所有图标和文本都使用与在单个View 中绘制相同的填充的事实
    • @snachmsm 不正确。 Chip 扩展了AppCompatCheckBox,但它基于ChipDrawable,即MaterialShapeDrawable。文本和图标是 not 复合可绘制对象。 @Soheil 你必须扩展 ChipDrawable 但大多数方法都是私有的。
    • 对,构造与我描述的不同,但这仍然是单个 Viewpadding 是整个 Views 属性,因此它将应用于整个内容。 Chip 提供了一些自定义属性,但我没有看到任何与 Soheils 要求相关的内容,并且private 方法实际上阻止了扩展此类。我并不是说这是不可能的,但这需要付出很多努力(挖掘源代码)并且未来的一些库更新可能会破坏这种修改,所以结论是一样的:最好的方法是创建自己的Chip-styled自定义View...
    • 如果有人感兴趣,也离开Chip source link
    猜你喜欢
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多