MessageDigest设计风格:

本文详细介绍Google在2015年发布的DesignSupportLibrary,该库包含8个MaterialDesign组件,最低支持Android2.1。文章深入讲解了TextInputLayout的使用方法,包括布局文件配置、hint颜色设置及主题应用。同时,介绍了SnackBar的使用方式,为开发者提供全面的MaterialDesign组件指南。

1. 简介

Design Support Library是Google在2015年的IO大会上发布的全新Material Design支持库,在这个support库里面主要包含了 8 个新的 Material Design组件,最低支持 Android 2.1。
安卓的需要:implementation ‘com.android.support:design:28.0.0’
安卓X的不需要
在这里插入图片描述

2.使用

TextInputLayout
布局文件

1 <android.support.design.widget.TextInputLayout
2        android:id="@+id/layout_account"
3        android:layout_width="match_parent"
4        android:layout_height="wrap_content"
5        android:layout_marginLeft="20dp"
6        android:layout_marginRight="20dp"
7        android:layout_marginTop="60dp">
8

9        <EditText
10            android:layout_width="match_parent"
11            android:layout_height="wrap_content" />
12

13    </android.support.design.widget.TextInputLayout>

在EditText中设置textColorHint属性是没有效果的,textColorHint会根据Theme的颜色来显示,只能通过设置Activity的Theme来更改hint的颜色。
•TextInputLayout包裹EditText,注意:TextInputLayout只能有一个子控件

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
2    <item name="colorPrimary">@color/colorPrimary</item>
3    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
4    <item name="colorAccent">@color/colorAccent</item>
5    <item name="android:textColorHint">@color/color_333333</item>
6</style>

属性:

app:counterEnabled="true"      //设置是否显示字数统计
2app:counterMaxLength="15"      //设置字数统计的最大值
3app:counterOverflowTextAppearance="@style/counterOverFlowAppearance"   //设置超出最大值后的样式
4app:counterTextAppearance="@style/counterAppearance"  

SnackBar:
最普通的SnackBar,只有文字说明,复杂的SnackBar可以带按钮及事件。

Snackbar.make(v, "谢谢浏览我的博客", Snackbar.LENGTH_SHORT).show();  //和Toast很像

其余可以点击连接继续观看
本文借鉴于https://blog.youkuaiyun.com/Fly_li_sir/article/details/79704021

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
项目背景 基于 Books 项目的 Java Web 架构(Servlet+JSP+JDBC),扩展实现包含管理员登录、教师信息维护、优秀学生展示的学校官网系统。 一、已有资源清单 技术栈 Java 8+、Servlet 3.0、JSP、MySQL Apache Commons DbUtils(数据库操作) JUnit(单元测试) 可用组件 JDBCUtil类:数据库连接工具(含getConnection()方法) PageUtil类:分页工具(支持泛型) BookDaoImpl类:CRUD 操作示例 前端基础模板(含 CSS 样式、表单处理) 接口规范 所有 DAO 方法需遵循 Books 项目的异常处理模式 Servlet 请求路径采用/module/action格式 二、功能实现要求 1. 管理员模块 数据库表: sql CREATE TABLE admin ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE, password VARCHAR(100), -- 存储SHA-256加密值 role VARCHAR(20) DEFAULT 'admin', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 核心接口: java // AdminDao.java Admin getByUsername(String username); boolean verifyPassword(String rawPassword, String encryptedPassword); // 需实现加密验证 登录流程: 接收/admin/login POST 请求(参数:username、password) 通过 DAO 查询用户 验证密码(明文→SHA-256→比对数据库) 成功则将 Admin 对象存入 Session,重定向至/admin/dashboard 2. 教师信息维护 数据库表: sql CREATE TABLE teacher ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, title VARCHAR(50), department VARCHAR(50), profile TEXT, photo_url VARCHAR(255), status TINYINT DEFAULT 1, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 核心接口: java // TeacherDao.java List<Teacher> listByPage(int pageNum, int pageSize); void save(Teacher teacher); void update(Teacher teacher); void delete(int id); Servlet 路径: /admin/teacher/list:分页展示教师列表 /admin/teacher/add:添加教师 /admin/teacher/edit/{id}:编辑教师 /admin/teacher/delete/{id}:删除教师 3. 优秀学生展示 数据库表: sql CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, grade VARCHAR(20), major VARCHAR(50), achievement TEXT, photo_url VARCHAR(255), is_excellent TINYINT DEFAULT 0, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 核心接口: java // StudentDao.java List<Student> listExcellentStudents(int limit); // 前台展示 PageInfo<Student> listByPage(int pageNum, int pageSize); // 后台管理 页面要求: 前台:/front/students展示优秀学生列表(图片 + 简介) 后台:/admin/student支持分页管理学生信息 三、技术实现约束 1. 代码复用规则 数据库操作:复用JDBCUtil的getConnection()方法 分页功能:复用PageUtil类,泛型参数使用Teacher/Student 事务处理:遵循 Books 项目的 DAO 层异常处理模式 2. 安全规范 密码加密:使用 SHA-256(示例实现) java public static String encrypt(String rawPassword) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(rawPassword.getBytes(StandardCharsets.UTF_8)); return bytesToHex(hash); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } SQL 注入防护:所有查询必须使用预编译语句 3. 前端规范 页面布局:保持与 Books 项目一致的 CSS 风格 文件上传:使用enctype="multipart/form-data"表单 图片存储:上传路径统一为/uploads/teachers/和/uploads/students/ 四、测试与验收标准 1. 单元测试 AdminDaoTest:验证用户查询和密码验证 TeacherDaoTest:验证 CRUD 操作 StudentDaoTest:验证优秀学生查询 2. 集成测试 使用 Postman 测试以下流程: 管理员登录(200 OK) 未登录访问/admin/*重定向至登录页 添加教师成功后在列表显示 前台学生页面正确展示优秀学生 3. 性能指标 教师 / 学生列表加载时间≤500ms(数据量≤100 条) 文件上传成功率≥99%(文件大小≤2MB) 五、交付文档要求 数据库 DDL 脚本:包含所有新增表结构 接口文档:每个 Servlet 的请求路径、参数、返回格式 核心类代码清单: Admin/Teacher/Student 实体类 所有 DAO 接口及实现 关键 Servlet 代码(如登录逻辑) 测试用例:JUnit 测试代码及 Postman 集合导出文件 六、协作建议 代码共享:使用 GitHub Gist 或 Pastebin 分享代码片段 问题追踪:通过 issue 列表记录实现中的问题 分阶段交付: 阶段 1:数据库设计 + 实体类 阶段 2:DAO 层实现 阶段 3:Servlet 层实现 阶段 4:前端页面 阶段 5:测试与优化
07-07
这是一个结构清晰、要求明确的项目需求文档,接下来我们可以按照分阶段交付的方式逐步实现这个学校官网系统。以下是**阶段1:数据库设计 + 实体类**的代码示例。 --- ### ✅ 阶段 1:数据库设计 + 实体类 #### 一、数据库表(DDL 脚本) ```sql -- 管理员表 CREATE TABLE admin ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE, password VARCHAR(100), role VARCHAR(20) DEFAULT 'admin', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 教师信息表 CREATE TABLE teacher ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, title VARCHAR(50), department VARCHAR(50), profile TEXT, photo_url VARCHAR(255), status TINYINT DEFAULT 1, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 学生信息表 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, grade VARCHAR(20), major VARCHAR(50), achievement TEXT, photo_url VARCHAR(255), is_excellent TINYINT DEFAULT 0, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` --- #### 二、Java 实体类定义 ##### `Admin.java` ```java public class Admin { private int id; private String username; private String password; private String role; private java.util.Date createTime; // Getters and Setters } ``` ##### `Teacher.java` ```java public class Teacher { private int id; private String name; private String title; private String department; private String profile; private String photoUrl; private byte status; private java.util.Date createTime; // Getters and Setters } ``` ##### `Student.java` ```java public class Student { private int id; private String name; private String grade; private String major; private String achievement; private String photoUrl; private byte isExcellent; private java.util.Date createTime; // Getters and Setters } ``` --- ✅ **阶段1完成标志:** - 数据库表已创建; - Java 实体类与数据库字段对应,命名规范统一; - 使用了标准的驼峰命名法(如`photo_url → photoUrl`)。 --- ### 接下来建议进入 **阶段2:DAO 层实现** 你可以选择继续让我帮你写出 DAO 接口及其实现类,例如: - `AdminDao.java` 和 `AdminDaoImpl.java` - `TeacherDao.java` 和 `TeacherDaoImpl.java` - `StudentDao.java` 和 `StudentDaoImpl.java` 或者你也可以提供你已有项目的 DAO 示例(如 BookDaoImpl),我可以基于其风格进行扩展。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值