-基本要求
1.NoteList中显示条目增加时间戳显示
2.添加笔记查询功能(根据标题查询)
+附加功能
1.UI美化
2.文本字体大小颜色修改
三.实验步骤
======
(1).程序大致理解
程序组成结构如下图:
1.Class
类NoteEditor是用来修改记事条目标题的类,NotePad是用来声名Static常量的类,NotePadProvider是ContentProvider类,也是最重要的一个类,NoteSearch是增加的用来实现搜索的类,NoteList是显示在主页面上的内容,TitleEditor是用来编辑标题的类。
2.layout
(1).note_editor.xml
用来实现NoteEditor的布局文件,其内容只包含一个
(2).note_search.xml
新增加的用来实现搜索界面的页面,是一个线性布局,其中包含一个SearchView和一个ListView,分别用来实现搜索功能和显示搜索出来的条目
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:orientation=“vertical”
android:layout_width=“match_parent”
android:layout_height=“match_parent”>
<SearchView
android:id=“@+id/search_view”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:queryHint=“请输入搜索内容…”
<ListView
android:id=“@android:id/list”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”>
(3).noteslist_item.xml
NoteList中用来显示每一条笔记的布局的布局文件,其中包含两个TextView,一个用来存放标题,另一个用来存放时间。
(4).title_editor.xml
修改标题时显示的页面,包含一个EditText用来修改标题,一个Button用来提交修改的标题
3.Menu
(1).editor_options_menu.xml
进入文本修改界面上方显示的menu,包含save,revert,delete,front_size,front_color几个选项
android:showAsAction=“ifRoom|withText”
如果空间足够的话默认会和图标一并显示出来
(2).list_context_menu.xml
长按时会显示的界面,包含open,copy,delete
(3).list_options_menu.xml
主页面上方显示的目录,包含新增加笔记,复制和搜索
2.时间戳显示的实现
首先我们先看一下创建的数据库,数据库中已经存在了COLUMN_NAME_CREATE_DATE,COLUMN_NAME_MODIFICATION_DATE,创建的时间和修改的时间都已经在数据库中。
public void onCreate(SQLiteDatabase db) {
db.execSQL(“CREATE TABLE " + NotePad.Notes.TABLE_NAME + " (”
-
NotePad.Notes._ID + " INTEGER PRIMARY KEY,"
-
NotePad.Notes.COLUMN_NAME_TITLE + " TEXT,"
-
NotePad.Notes.COLUMN_NAME_NOTE + " TEXT,"
-
NotePad.Notes.COLUMN_NAME_CREATE_DATE + " INTEGER,"
-
NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE + " INTEGER"
-
NotePad.Notes.COLUMN_NAME_TEXT_COLOR + “INTEGER” //新增加的修改字体颜色
-
NotePad.Notes.COLUMN_NAME_TEXT_SIZE + “INTEGER” //新增加的修改字体大小
-
“);”);
}
那我们需要的就是在创建和修改的时候对数据库中的时间进行相应的显示。
创建时显示的时间是在NotePadProvider的insert函数实现的,
Long now = Long.valueOf(System.currentTimeMillis());
if (values.containsKey(NotePad.Notes.COLUMN_NAME_CREATE_DATE) == false) {
values.put(NotePad.Notes.COLUMN_NAME_CREATE_DATE, now);
}
// If the values map doesn’t contain the modification date, sets the value to the current time.
if (values.containsKey(NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE) == false) {
values.put(NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE, now);
}
我们需要对它进行修改
Date date = new Date(now);
SimpleDateFormat format = new SimpleDateFormat(“yy.MM.dd HH:mm:ss”);
String dateTime = format.format(date);
然后用dateTime替换now
接下来我们需要实现时间的显示,先在noteslist_item.xml中增加一个用来显示时间的TextView
<TextView
android:id=“@+id/text2”
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:textAppearance=“?android:attr/textAppearanceLarge”
android:textColor=“@color/yellow”
android:textSize=“20sp”
/>
然后在NotesList的数据定义中增加修改时间
private static final String[] PROJECTION = new String[] {
NotePad.Notes._ID, // 0
NotePad.Notes.COLUMN_NAME_TITLE, // 1
NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE,//在这里加入了修改时间的显示
};
查询数据还是按原来的方法,不需要修改
//NoteList使用SimpleCursorAdapter来装配数据,首先查询数据库的内容,
// 如下代码所示,这里使用ContentProvider默认的URI。
Cursor cursor = managedQuery(
getIntent().getData(), // Use the default content URI for the provider.
PROJECTION, // Return the note ID and title 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.
);
装配的时候需要装配相应的日期,所以dataColumns,viewIDs这两个参数需要加入时间
String[] dataColumns = {
NotePad.Notes.COLUMN_NAME_TITLE,
NotePad.Notes.COLUMN_NAME_MODIFICATION_DATE
} ;
int[] viewIDs = { android.R.id.text1 ,R.id.text2};
然后通过SimpleCursorAdapter来进行装配
// Creates the backing adapter for the ListView.
//然后通过SimpleCursorAdapter来进行装配:
SimpleCursorAdapter adapter
= new SimpleCursorAdapter(
this, // The Context for the ListView
R.layout.noteslist_item, // Points to the XML for a list item
cursor, // The cursor to get items from
dataColumns,
viewIDs
);
时间就会显示在相应的条目上
如图:
这时候可能会发现时间差了8小时,或者发现虚拟机的时间和真实的时间差了八小时,即使把时间改过来下次时间还是错误的,这是由于时区的问题带来的,可以在代码中增加如下的内容:
format.setTimeZone(TimeZone.getTimeZone(“GMT”));
这样的话就会采用中国北京的标准时区,时间就会改正过来,或者在手机中修改相应的时区,光修改时间是没用的
3.添加笔记查询功能
首先,我们要在list_options_menu.xml中新建一个查询的按钮,作为查询功能实现的媒介
<item
android:id=“@+id/menu_search”
android:icon=“@drawable/search”
android:title=“@string/menu_search”
android:showAsAction=“always”
/>
这时候查询按钮就会显示在NotesList的主界面上
然后增加点击之后的反应,在onOptionsItemSelected的switch (item.getItemId())中添加对应menu_search的case:
case R.id.menu_search:
startActivity(new Intent(Intent.ACTION_SEARCH,getIntent().getData()));
return true;
在其中加入隐式Intent的跳转,方式仿照上面的写法
startActivity(new Intent(Intent.ACTION_SEARCH,getIntent().getData()));
然后在AndroidManifest.xml中加入相应的声名
<activity
android:name=“.NoteSearch”
android:label=“NoteSearch”
之后就可以跳转到相应的搜索界面
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节
以上【历年大厂高级工程师面试题集】、【Android高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。如有需要,点击**【Android架构视频+BATJ面试专题PDF+学习笔记】**即可免费获取。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-Ev0Qcdo0-1710692459911)]
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节
[外链图片转存中…(img-ZTOBMQZ1-1710692459911)]
以上【历年大厂高级工程师面试题集】、【Android高级进阶教学视频】、【Android高级知识点学习PDF】皆无偿分享给大家。如有需要,点击**【Android架构视频+BATJ面试专题PDF+学习笔记】**即可免费获取。
整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。