如何实现材料设计“全角文本字段”?

时间:2015-09-03 16:11:47

标签: android material-design

我想在Material Design中实现“全角文本字段”,如下所示:https://www.google.com/design/spec/components/text-fields.html#text-fields-full-width-text-field

enter image description here

如何使用Material Design库?

可用的库至少在最近的版本中是这样的:

  • com.android.support:design:23.0.1
  • com.android.support:appcompat-v7:23.0.1
  • com.android.support:support-v4:23.0.1

我开始使用EditText作为索引:

<EditText
    android:id="@+id/receivers"
    android:layout_below="@+id/toolbar"
    android:layout_width="match_parent"
    android:padding="20sp"
    android:hint="Receivers"
    android:inputType="textMultiLine"
    android:gravity="top"
    android:layout_height="wrap_content" />

<EditText
    android:layout_height="match_parent"
    android:id="@+id/new_message_text"
    android:layout_below="@+id/receivers"
    android:layout_width="match_parent"
    android:padding="20sp"
    android:hint="@string/hint_new_message"
    android:inputType="textMultiLine"
    android:gravity="top" />

看起来像那样

enter image description here

  • 有没有办法从库中获取填充(20sp)值?
  • 如何删除EditText底部的行?
  • 从哪里获取水平分隔符?

1 个答案:

答案 0 :(得分:9)

文本字段的值

<EditText
  android:layout_height="wrap_content"
  android:layout_width="match_parent"
  android:background="@null"
  android:gravity="center_vertical|start"
  android:minHeight="?listPreferredItemHeight"
  android:paddingTop="20dp"
  android:paddingBottom="20dp"
  android:paddingLeft="?listPreferredItemPaddingLeft"
  android:paddingRight="?listPreferredItemPaddingRight" />
  • android:background="@null"将使用隐含的4dp填充删除下划线。
  • android:minHeight="?listPreferredItemHeight"扩展为56dp。视图总是至少56dp高。由于android:gravity="center_vertical|start",因此文本将始终垂直居中。
  • android:paddingLeft="?listPreferredItemPaddingLeft"android:paddingRight="?listPreferredItemPaddingRight"在手机上扩展到16dp,在平板电脑上扩展到24dp。
  • 垂直填充始终相同 - 16dp 20dp,如Material Design > Components > Text Fields > Full-width text field中所述。

容器的值

容器看起来像LinearLayout,它在API 14中引入了分隔符支持。在LinearLayout上使用这些属性:

android:divider="?listDivider"
android:showDividers="middle"

您可以使用任何自定义可绘制参考,而不是?listDivider这是您的主题提供的属性。

附加说明

1) Material Design规范与appcompat-v7库中定义的实际值之间存在一些不一致。

listPreferredItemHeight应返回56dp,但它返回64dp。类似地,listPreferredItemHeightLarge(在这种情况下未使用)返回80dp而不是72dp。您可以通过重新定义主题中的属性来解决此问题:

<item name="android:listPreferredItemHeight">56dp</item>

2) NOT 直接使用颜色资源作为分隔符。它的隐式高度和宽度等于-1。你需要一个自定义的形状可绘制。