Material Design 是 Google 推出的一种全新的设计语言,旨在为移动端和 Web 应用程序提供一种更加统一和美观的设计风格。其中,EditText 是应用程序中最常用的控件之一,用于接收用户的输入。在 Material Design 中,EditText 的样式也得到了全新的设计,本文将介绍如何自定义 EditText 实现 Material Design 的样式。
1. 基本样式
Material Design 中的 EditText 样式可以分为三个部分:边框、提示文字和输入文字。下面我们来逐一实现这三个部分。
1.1 边框样式
Material Design 中的 EditText 边框样式为一个矩形框,四个角是圆角。我们可以通过自定义 Drawable 实现这个效果。具体实现方式如下:
- 在 res/drawable 目录下新建一个 xml 文件,命名为 edittext_border.xml。
- 在 edittext_border.xml 中添加如下代码:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="4dp" />
<stroke
android:width="1dp"
android:color="@color/border_color" />
</shape>其中,corners 标签设置圆角半径,stroke 标签设置边框宽度和颜色。这里我们将圆角半径设置为 4dp,边框宽度设置为 1dp,边框颜色设置为 @color/border_color。
- 在 res/values/colors.xml 文件中定义 border_color:
<color name="border_color">#9E9E9E</color>
这样我们就完成了 EditText 的边框样式的自定义。接下来我们将实现提示文字和输入文字的样式。
1.2 提示文字样式
Material Design 中的 EditText 的提示文字样式为浅灰色,当 EditText 获得焦点时,提示文字会上移并变为深灰色。我们可以通过设置 EditText 的 hint 和 hintTextColor 属性实现这个效果。具体实现方式如下:
- 在 res/values/colors.xml 文件中定义 hint_color 和 hint_focus_color:
<color name="hint_color">#BDBDBD</color> <color name="hint_focus_color">#757575</color>
- 在 res/layout 目录下的 xml 文件中添加 EditText 控件,并设置 hint 和 hintTextColor 属性:
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/edittext_border"
android:hint="Hint Text"
android:hintTextColor="@color/hint_color"
android:textColor="@color/text_color" />其中,textColor 属性设置输入文字颜色为 @color/text_color。
- 在 Java 代码中监听 EditText 的焦点变化,当 EditText 获得焦点时,改变提示文字的颜色和位置:
// www.javascriptcn.com code example
EditText editText = findViewById(R.id.edittext);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
((EditText) v).setHintTextColor(ContextCompat.getColor(MainActivity.this, R.color.hint_focus_color));
v.animate().translationY(-getResources().getDimension(R.dimen.edittext_translation_y)).setDuration(300).start();
} else {
((EditText) v).setHintTextColor(ContextCompat.getColor(MainActivity.this, R.color.hint_color));
v.animate().translationY(0).setDuration(300).start();
}
}
});其中,translationY 方法用于改变控件的 Y 轴位置,setDuration 方法设置动画持续时间。这样我们就完成了提示文字样式的自定义。
1.3 输入文字样式
Material Design 中的 EditText 的输入文字样式为黑色,当 EditText 获得焦点时,输入文字会上移并变为深灰色。我们可以通过设置 EditText 的 textColor 属性和监听 EditText 的焦点变化实现这个效果。具体实现方式如下:
- 在 res/values/colors.xml 文件中定义 text_color 和 text_focus_color:
<color name="text_color">#000000</color> <color name="text_focus_color">#424242</color>
- 在 res/layout 目录下的 xml 文件中添加 EditText 控件,并设置 textColor 属性:
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/edittext_border"
android:hint="Hint Text"
android:hintTextColor="@color/hint_color"
android:textColor="@color/text_color" />- 在 Java 代码中监听 EditText 的焦点变化,当 EditText 获得焦点时,改变输入文字的颜色和位置:
// www.javascriptcn.com code example
EditText editText = findViewById(R.id.edittext);
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
((EditText) v).setTextColor(ContextCompat.getColor(MainActivity.this, R.color.text_focus_color));
v.animate().translationY(-getResources().getDimension(R.dimen.edittext_translation_y)).setDuration(300).start();
} else {
((EditText) v).setTextColor(ContextCompat.getColor(MainActivity.this, R.color.text_color));
v.animate().translationY(0).setDuration(300).start();
}
}
});这样我们就完成了输入文字样式的自定义。
2. 深度和学习意义
本文介绍了如何自定义 EditText 实现 Material Design 的样式,通过深入学习 Material Design,我们可以更好地设计和开发应用程序,提升用户体验。同时,本文也介绍了一些常用的 Android 开发技巧,如自定义 Drawable、使用属性动画等,对于 Android 开发者来说也具有一定的指导意义。
3. 示例代码
完整的示例代码可以在我的 GitHub 仓库中找到:https://github.com/zhangkaiyuan/material-design-edittext。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d27000a941bf71344931a6