Android如何将固定大小的芯片文本居中?

时间:2019-08-30 17:25:15

标签: android material-design

我有一个宽度为100dp的芯片,但是文本居中的方式没有居中。

我将androidx与材料库一起使用,我尝试将android:textAlignment="center"android:gravity="center"放进去,但不起作用

<com.google.android.material.chip.Chip
    android:id="@+id/chip"
    style="@style/Widget.MaterialComponents.Chip.Choice"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:text="7:00" />

我有这个

chip

我想要这个

enter image description here

4 个答案:

答案 0 :(得分:3)

简短答案:

并不是要使用芯片的方式来尝试使用它们。他们应该包装您的内容。因此,没有干净的方法将文本居中对齐。 有一个解决方法,您可以使用Chip_textEndPaddingChip_textStartPadding属性,我想这有点尴尬。

我真的不知道您要实现什么,我的意思是,您为什么要这么做?是按钮吗?是否只是显示一些文字? 请描述该功能或至少其中一部分。

无论如何:

根据material design guidelines

  

片段允许用户输入信息,进行选择,过滤内容或触发操作。筹码应动态显示为一组多个交互式元素。与按钮不同,按钮应该是一致且熟悉的号召性用语,而用户希望按钮在相同的常规区域中显示为相同的操作。

您的功能与此有关吗?

如果您想要一个可点击的圆形组件,则可以简单地使用material button

github也曾问过类似的问题。

答案 1 :(得分:1)

现在我遇到了同样的问题,我通过设置一个芯片属性android: textAlignment = "center"解决了这个问题。我测试了您的示例,它也正常工作,这里是我测试的代码:

<FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <com.google.android.material.chip.Chip
            android:id="@+id/chip"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="7:00"
            android:textAlignment="center"/>
</FrameLayout>

还要确保您未在​​代码中的任何地方设置或更改芯片的文本对齐方式。

答案 2 :(得分:0)

使用isTextAlignmentResolved, 例如,chipname.isTextAlignmentResolved()以编程方式进行。

答案 3 :(得分:0)

正如其他人所说,您可以使用 textAlignment ...但我想告诉您,如果您使用自定义字体,它不会完全垂直对齐。你可以check here进行解释。

所以我会创建一个从芯片样式继承的自定义样式并设置字体填充以供如下使用:

 <style name="customStyle" parent="@style/Widget.MaterialComponents.Chip.Choice">
    <item name="chipBackgroundColor">@color/white</item>

   ******* <item name="android:includeFontPadding">true</item> *************
  </style>

然后对于文本外观,您可以制作另一种样式:

<style name="CustomChipTextAppearance" parent="TextAppearance.MaterialComponents.Chip">
    <item name="android:fontFamily">?attr/myFont</item>
    <item name="android:textAlignment">center</item>
  </style>

不要忘记在 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"
      xmlns:tools="http://schemas.android.com/tools"
      style="@style/customStyle"
      ****  android:theme="@style/Theme.MaterialComponents.Bridge" ****
***** android:textAppearance="@style/CustomChipTextAppearance"  *******
      app:chipMinHeight="38dp"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      app:chipStrokeWidth="2dp" 
      app:rippleColor="@android:color/transparent"
      tools:chipText="my chip" />