TextView、EditText、Button 实战
一、项目初始化与布局基础设置
1. 新建Android项目
- 打开Android Studio,选择「Empty Activity」模板
- 设置项目基本属性:
- 项目名称:可自定义(示例中为
androidetext
) - 包名:示例中为
com.example.androidetext
- 保存路径:选择本地目录
- 语言:Java
- 最低SDK:根据需求选择(建议API 21及以上)
- 项目名称:可自定义(示例中为
2. 线性布局基础配置
修改activity_main.xml
,将线性布局设置为垂直,子组件对齐方式水平居中,设置内边距为50dp等:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent" <!-- 宽度匹配父容器 -->android:layout_height="match_parent" <!-- 高度匹配父容器 -->android:gravity="center_horizontal" <!-- 子组件水平居中对齐 -->android:orientation="vertical" <!-- 子组件垂直排列 -->android:padding="50dp"> <!-- 内边距50dp --><!-- 子组件将在这里添加 -->
</LinearLayout>
二、UI组件实现(XML布局)
3. 文本显示框(TextView)配置
添加一个TextView,使用字符串资源、置字体大小为20sp,文本颜色为#00f,工具提示文本等:
<TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/androidtest1_html" <!-- 引用strings.xml中的字符串资源 -->android:textColor="#000000" <!-- 文本颜色(示例为黑色,可改为#00f) -->android:textSize="20sp" <!-- 字体大小20sp -->android:layout_marginTop="10dp" <!-- 上内边距10dp -->android:textStyle="bold" <!-- 文本样式:粗体 -->android:gravity="center" <!-- 文本内部居中 -->tools:text="工具预览文本" /> <!-- 工具提示文本(仅预览显示) -->
- 字符串资源定义(
res/values/strings.xml
):
<string name="androidtest1_html">初始文本内容</string>
4. 文本编辑框(EditText)实现
添加用户名和密码输入框,配置提示信息与基础样式:设置输入提示信息,最小高度48dp,忽略自动填表,外边距(上)为10dp等
用户名输入框
<EditTextandroid:id="@+id/editTextText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp" <!-- 上外边距10dp -->android:ems="10" <!-- 宽度为10个字符 -->android:hint="@string/name_hint" <!-- 提示文字(引用字符串资源) -->android:inputType="text" <!-- 输入类型:文本 -->android:minHeight="48dp" <!-- 最小高度48dp -->tools:ignore="AutoFill, VisualDensity" /> <!-- 忽略自动填表和文本尺寸检查警告 -->
密码输入框
<EditTextandroid:id="@+id/editTextTextPassword"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:ems="10"android:hint="@string/password_hint" <!-- 密码提示文字 -->android:inputType="textPassword" <!-- 输入类型:密码(输入内容隐藏) -->android:minHeight="48dp"tools:ignore="AutoFill, VisualDensity" />
- 字符串资源补充:
<string name="name_hint">请输入用户名</string>
<string name="password_hint">请输入密码</string>
5. 按钮(Button)布局与配置
新建一个线性布局,设置控件高度为包裹内容,外边距(上)为10dp等
通过嵌套线性布局实现登录和注册按钮的排列:
<!-- 嵌套线性布局:包裹按钮 -->
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"> <!-- 高度包裹内容 --><!-- 登录按钮 --><Buttonandroid:id="@+id/button"android:layout_width="0dp" <!-- 宽度由权重分配 -->android:layout_height="wrap_content"android:layout_weight="2" <!-- 权重为2(占比2/3) -->android:text="@string/login" <!-- 按钮文字:登录 -->tools:ignore="VisualLintButtonSize" /><!-- 注册按钮 --><Buttonandroid:id="@+id/button2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="10dp" <!-- 左外边距10dp(与登录按钮间隔) -->android:layout_weight="1" <!-- 权重为1(占比1/3) -->android:text="@string/register" <!-- 按钮文字:注册 -->tools:ignore="VisualLintButtonSize" />
</LinearLayout>
- 字符串资源补充:
<string name="login">登录</string>
<string name="register">注册</string>
6. 带链接识别的TextView
添加自动识别链接(网址、电话等)的文本框:
<TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp" <!-- 上外边距50dp -->android:autoLink="all" <!-- 自动识别所有类型链接(网址、邮箱、电话等) -->android:text="@string/about" /> <!-- 文本内容(例如:"官网:https://example.com 电话:123456") -->
7. 带阴影效果的TextView
配置阴影属性实现文本阴影效果:
<TextViewandroid:id="@+id/textView3"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:gravity="center"android:shadowColor="#f00" <!-- 阴影颜色(红色) -->android:shadowDx="5" <!-- 阴影水平偏移量5dp -->android:shadowDy="5" <!-- 阴影垂直偏移量5dp -->android:shadowRadius="5" <!-- 阴影模糊半径5dp -->android:textColor="#f00" <!-- 文本颜色(红色) -->android:textSize="50sp"android:text="@string/show" /> <!-- 文本内容 -->
8. 带变形效果的TextView
通过属性设置实现旋转、缩放、平移等变形效果:
<TextViewandroid:id="@+id/textView4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:alpha="0.5" <!-- 透明度50%(0-1之间) -->android:rotation="120" <!-- 2D平面旋转120度 -->android:rotationX="60" <!-- 绕X轴3D旋转60度 -->android:rotationY="30" <!-- 绕Y轴3D旋转30度 -->android:scaleX="10" <!-- 水平方向放大10倍 -->android:scaleY="5" <!-- 垂直方向放大5倍 -->android:translationX="100dp" <!-- 水平平移100dp -->android:translationY="50dp" <!-- 垂直平移50dp -->android:text="@string/transforms" /> <!-- 文本内容 -->
三、Java代码逻辑实现
9. 初始化组件与修改文本(HTML样式)
在MainActivity.java
中,通过代码修改TextView内容并设置HTML样式:
package com.example.androidetext;import android.os.Bundle;
import android.text.Html;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); // 加载布局文件// 初始化TextView并修改内容(HTML样式)TextView textView = findViewById(R.id.textView);// 使用Html.fromHtml()解析HTML标签,将"HTML"设置为红色textView.setText(Html.fromHtml("替换为<font color='red'>HTML</font>文档", Html.FROM_HTML_MODE_COMPACT));}
}
10. 按钮点击事件与登录注册功能
实现登录和注册按钮的点击监听,处理业务逻辑:
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {// 声明EditText变量private EditText editText; // 用户名输入框private EditText editPassword; // 密码输入框@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化EditText组件editText = findViewById(R.id.editTextText);editPassword = findViewById(R.id.editTextTextPassword);// 注册按钮点击事件:显示提示(未开放功能)findViewById(R.id.button2).setOnClickListener(v -> Toast.makeText(this, "暂时未开放注册功能", Toast.LENGTH_SHORT).show());// 登录按钮点击事件:调用login()方法处理登录逻辑findViewById(R.id.button).setOnClickListener(this::login);}// 登录逻辑处理方法private void login(View view) {// 获取输入的用户名和密码String userName = editText.getText().toString();String password = editPassword.getText().toString();// 校验输入if (userName.isEmpty()) {Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();return; // 终止方法,不继续执行} else if (password.isEmpty()) {Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();return;}// 验证账号密码(示例:admin/1234)if (userName.equals("admin") && password.equals("1234")) {Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show();}}
}
完整代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical"android:padding="50dp"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/androidtest1_html"android:textColor="#000000"android:textSize="20sp"android:gravity="center" /><!-- <TextView-->
<!-- android:id="@+id/textView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="@string/title"-->
<!-- android:textColor="#E64B4B"-->
<!-- android:textSize="20sp"-->
<!-- tools:text="运行不显示" />--><!--android:hint 用于定义当输入框为空时显示的提示文字 当用户开始输入内容时,提示文字会自动消失
--><EditTextandroid:id="@+id/editTextText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:ems="10"android:hint="@string/name_hint"android:inputType="text"android:minHeight="48dp"tools:ignore="AutoFill, VisualDensity" /><EditTextandroid:id="@+id/editTextTextPassword"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:ems="10"android:hint="@string/password_hint"android:inputType="textPassword"android:minHeight="48dp"tools:ignore="AutoFill, VisualDensity" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/button"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="2"android:text="@string/login"tools:ignore="VisualLintButtonSize" /><Buttonandroid:id="@+id/button2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_weight="1"android:text="@string/register"tools:ignore="VisualLintButtonSize" /></LinearLayout><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:autoLink="all"android:text="@string/about" /><TextViewandroid:id="@+id/textView3"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:gravity="center"android:shadowColor="#f00"android:shadowDx="5"android:shadowDy="5"android:shadowRadius="5"android:textColor="#f00"android:textSize="50sp"android:text="@string/show" /><!-- android:alpha="0.5": 设置控件透明度为 50%(0-1 之间,0 为完全透明,1 为完全不透明)-->
<!-- android:rotation="120": 控件在 2D 平面上旋转 120 度-->
<!-- android:rotationX="60": 控件绕 X 轴旋转 60 度(3D 效果)-->
<!-- android:rotationY="30": 控件绕 Y 轴旋转 30 度(3D 效果)-->
<!-- android:scaleX="10": 控件在水平方向放大 10 倍-->
<!-- android:scaleY="5": 控件在垂直方向放大 5 倍-->
<!-- android:translationX="100dp": 控件在水平方向上平移 100dp-->
<!-- android:translationY="50dp": 控件在垂直方向上平移 50dp--><TextViewandroid:id="@+id/textView4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:alpha="0.5"android:rotation="120"android:rotationX="60"android:rotationY="30"android:scaleX="10"android:scaleY="5"android:translationX="100dp"android:translationY="50dp"android:text="@string/transforms" /></LinearLayout>
public class MainActivity extends AppCompatActivity {private EditText editText;private EditText editPassword;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);// 初始化EditText组件editText = findViewById(R.id.editTextText);editPassword = findViewById(R.id.editTextTextPassword);// 修改字体颜色TextView viewById = findViewById(R.id.textView);viewById.setText(Html.fromHtml("替换为<font color='red'>HTML</font>文档", Html.FROM_HTML_MODE_COMPACT));// 设置按钮的监听事件findViewById(R.id.button2).setOnClickListener(v -> Toast.makeText(this, "暂时为开放注册功能", Toast.LENGTH_SHORT).show());findViewById(R.id.button).setOnClickListener(this::login);}private void login(View view) {String userName = editText.getText().toString();String password = editPassword.getText().toString();if(userName.isEmpty()){Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();return; // 添加return终止方法执行}else if(password.isEmpty()){Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();return; // 添加return终止方法执行}if (userName.equals("admin") && password.equals("1234")) {Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();}else {Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show();}}}
结果展示
四、功能说明与总结
- 布局结构:通过线性布局(垂直方向)组织所有组件,保证UI整齐排列。
- TextView:实现了基础文本显示、HTML样式文本、链接自动识别、阴影效果、变形效果等功能。
- EditText:通过
inputType
区分普通文本和密码输入,hint
属性提供输入提示。 - Button:通过权重分配按钮宽度,点击事件分别处理登录逻辑和注册提示。
- 交互逻辑:登录时校验输入合法性,通过Toast提示操作结果,提升用户体验。
通过以上步骤,可完成一个包含文本显示、输入框、按钮交互的基础Android页面。