NotePad功能添加


@author:065

NotePad是一个比较完整的安卓开发sample,只不过源码都比较旧了,这一次期中考试开始的时候我花了很久的时间让整个项目跑起来,顺便更新了一些方法的用法。
首先,阅读老师给的整个项目的初步分析(链接)大致了解了整个项目的结构

原文:“一共包含了6个类,其中4个Activity,一个ContentProvider,还有一个数据契约类。
· NotesList 应用程序的入口,笔记本的首页面会显示笔记的列表
· NoteEditor 编辑笔记内容的Activity
· TitleEditor 编辑笔记标题的Activity
· NotesLiveFolder ContentProvider的LiveFolder(实时文件夹),这个功能在Android API 14后被废弃,不再支持。因此代码中所有涉及LiveFolder的内容将不再阐述。
· NotePadProvider 这是笔记本应用的ContentProvider,也是整个应用的关键所在”

项目整理

在第一次导入项目的时候,无法在虚拟机上运行整个项目,大致问题都是出现在整个工程太旧,所以sync不成功.
1.minSdkVersion 11 cannot be smaller than version 14一开始我按照AS的提示,将minSdkVersion改成了14,如图:

2.sync成功后,在我创建了一个约束布局的xml后又报错了,发现无法在这个项目中使用约束布局。在简单思考一会后,我决定在自己经常使用的环境下重构整个项目。
build.gradle:

apply plugin: 'com.android.application'android {compileSdkVersion 29buildToolsVersion "29.0.3"defaultConfig {applicationId "com.x1nge.notepaddemo2"minSdkVersion 25targetSdkVersion 29versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'androidx.appcompat:appcompat:1.0.2'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

然后导入必要的代码文件,再进行一些小error的修复,就可以成功跑起程序了。

为NotePad每条记录显示时间

在阅读老师的文件说明的时候,老师针对这一功能的添加作了一个小小的提示(原文):

结合代码原来的注释:


不难发现这里就有现成时间可以使用,这里我使用修改时间。
1.在PROJECTION中加入我们要显示的时间:

    /*** The columns needed by the cursor adapter*/private static final String[] PROJECTION = new String[] {NotePad.Notes._ID, // 0NotePad.Notes.COLUMN_NAME_TITLE, // 1NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE, // time};

2.相应的,添加要装配的数据:

// The names of the cursor columns to display in the view, initialized to the title columnString[] dataColumns = { NotePad.Notes.COLUMN_NAME_TITLE , NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE } ;// The view IDs that will display the cursor columns, initialized to the TextView in// noteslist_item.xmlint[] viewIDs = { android.R.id.text1,R.id.time };

3.在这里我们把要显示的文本放在标题的下方:

         <TextViewandroid:id="@+id/time_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceSmall"android:text="@string/time_title"android:paddingLeft="5dip" /><TextViewandroid:id="@+id/time"android:layout_width="match_parent"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceSmall"android:paddingLeft="5dip" />

在这里源码所用的一个方法已经过时了,根据AS提示,将它修改成新的方法:

     Cursor cursor = getContentResolver().query(getIntent().getData(),            // Use the default content URI for the provider.PROJECTION,                       // Return the note ID ,  title and time for each note.null,                             // No where clause, return all records.null,                             // No where clause, therefore no where column values.NotePad.Notes.DEFAULT_SORT_ORDER  // Use the default sort order.);

这样就很轻松地完成了整个时间的显示,但是会发现显示的时间戳,一般来说我们见到的都是显示一个具体的时间,所以这里要把时间戳转换成Date型数据。

首先import所需要的包:

import java.text.SimpleDateFormat;
import java.util.Date;

在NotePadProvider.java中,我们修改这一部分:

         // Gets the current system time in millisecondsLong now = Long.valueOf(System.currentTimeMillis());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date(Long.parseLong(String.valueOf(now))));

再将put的参数由now改成我们定义的time
在NoteEditor.java中,我们在update方法中也修改时间的类型:

     // Sets up a map to contain values to be updated in the provider.ContentValues values = new ContentValues();Long now = Long.valueOf(System.currentTimeMillis());SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date(Long.parseLong(String.valueOf(now))));values.put(NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE, time);

大功告成看下成果:

添加搜索框

安卓开发中有一个搜索框的组件SearchView,我们可以根据这一组件来构建搜索框。按照老师上课的提示,我们把这个搜索放在菜单上,并且点击后弹出新的页面。
1.画一个搜索的视图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_back"android:layout_width="66dp"android:text="												

NotePad功能添加相关推荐

  1. notepad++功能简介

    Notepad++一些好用的特性 [notepad++简介] Notepad++是旨在替代Windows默认的notepad而生,比notepad的功能强大很多很多. (1)Notepad++的版本: ...

  2. 将自定义功能添加到Spring数据存储库

    Spring Data非常方便,并且避免了样板代码,从而加快了开发速度. 但是,在某些情况下,注释查询不足以实现您可能想要实现的自定义功能. 因此,spring数据允许我们向Spring数据存储库添加 ...

  3. CAD将未显示在工具栏中的功能添加到工具栏中——以QLEADER为例

    问题描述 CAD将未显示在工具栏中的功能添加到工具栏中--以QLEADER为例 问题解决 这时我们可以选择视图→工具栏. 在下拉框中选择标注 将其拖动至标注工具栏 最后点击确定即可.

  4. win10可选功能添加失败解决方法

    解决win10可选功能添加失败方法 1.检查本机是否禁用系统更新(不包含注册表关闭的系统更新功能) 使用快捷键 windows+R 打开运行命令,输入services.msc进入服务面板,如图所示: ...

  5. android方法中添加 N,Android N 新功能 - 添加快速设定

    Android N version 其中一个功能,就是允许三方app可以添加自己的快速设定,到系统的下拉设定中,方便用户快速打开关闭某些功能. 废话不多说,直接上代码来讲解. 创建一个class,继承 ...

  6. mysql添加映射模块_iis7.5中让html与shtml一样支持include功能(添加模块映射)

    刚开始弄得时候,发现了很多错误,其实很简单,参考shtm原来的设置就可以了 前提条件: ServerSideIncludeModule的安装: 在安装iis的时候选择上该服务("在服务端包含 ...

  7. webui 通过提示词矩阵的文本框功能添加负面标签

    众所周知使用该功能可以添加很多行tag,脚本会解析一行中所有tag内容,逐行生成图片 默认每行输入是按照正咒的形式输入的,跑的多了,出现了很多一个脑袋两个身体之类的怪东西,通过添加负面标签可以一定程度 ...

  8. ios绘图_使用Pencilkit轻松将绘图功能添加到ios应用

    ios绘图 The PencilKit framework was introduced by Apple in iOS 13. It gives developers the ability to ...

  9. antd vue实现日历功能——添加放假时间功能——基础积累

    最近再写后台管理系统时,遇到一个需求,就是需要写一个日历,然后添加放假时间的功能. 需要实现的功能有: 日历表头需要设置为当前年份的前后两年,比如今年是2022年,则年份下拉中时间为 2021.202 ...

最新文章

  1. 天梯赛 L1-009 N个数求和 (20 分)
  2. Github 简明教程 - 添加远程库
  3. java环境变量javac不能成功 win7_配置Java环境
  4. 2020 大厂研发岗薪酬排名出炉,看完我真的拖后腿了。。。
  5. mysql 5.6 没死_MySQL 5.6不删空用户的影响
  6. spring boot 尚桂谷学习笔记07 嵌入式容器 ---Web
  7. win7系统efi激活教程:无需efi win7激活工具解决无法分配盘符问题
  8. 扒一扒「清华系」的 AI 安防大佬们
  9. 50句形容美人的绝佳诗句,只看一眼,惊艳千年
  10. linux系统自动获取ip地址,Linux系统怎么自动获取ip地址用什么命令
  11. 计算机网络接口 rj45类型,网卡:网线接口类型(RJ45/BNC/AUIFDDI/ATM接口) -电脑资料...
  12. 逆思维:GAN不能生成什么?Seeing What a GAN Cannot Generate
  13. 树莓派系统安装 3.5寸LCD驱动安装 ssh远程链接
  14. 固态硬盘SSD使用随笔
  15. 解读 | 经典实验介绍之小心视崖,等你来了解哦
  16. 学习PLC LAD 梯形逻辑宝藏网站
  17. 耳朵上的艺术品,飞利浦圈铁真无线耳机JT60无敌了!
  18. 计算统计-Chap6 推断统计的蒙特卡罗方法 (3)蒙特卡罗方法
  19. java 只获取年月日_Java获取当前时间的年月日方法
  20. 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍

热门文章

  1. 唐探、小说家、李焕英,哪一部贺岁档电影值得一看
  2. 奇说妙语百度云_陶杰
  3. UE4在Windows系统下交叉编译Linux环境
  4. 【Linux】ln: failed to create symbolic link ‘*.so’: Operation not supported
  5. 区块链存证原理与流程--基于xuperchain司法存证系统开发的学习笔记
  6. 解析亚马逊 SFTP中订单报文 EDI ANSI X12 格式
  7. 00_linux 设备驱动模型 2.6以后通用模型
  8. 怎样给Tab Control控件加上背景颜色或图片
  9. C/语/言/自/学/笔记
  10. 阿里VP贾扬清被曝将离职创业:建大模型基础设施,已火速锁定首轮融资