当前位置:   article > 正文

Android 记事本功能的简单实现_安卓记事本代码

安卓记事本代码

初始化试图

public ViewHolder(View itemView) {

if (itemView == null){

throw new IllegalArgumentException(“item View can not be null!”);

}

this.itemView = itemView;

itemIcon = itemView.findViewById(R.id.rand_icon);

itemNoteTitle = itemView.findViewById(R.id.item_note_title);

itemNoteDate = itemView.findViewById(R.id.item_note_date);

}

时间布局

<TextView

android:id=“@+id/item_note_date”

android:layout_width=“match_parent”

android:layout_height=“0dp”

android:layout_weight=“1”

android:textSize=“16sp”

android:gravity=“center_vertical”

android:singleLine=“true”/>

查询功能

===============================================================

通过EditText内容的动态变化来实现查询


在这里插入图片描述

通过标题来模糊查询数据库的数据

private void getSelectNoteList(String title){

noteList.clear();

Cursor allNotes = Note.selectNotes(dbHelper,title);

for (allNotes.moveToFirst(); !allNotes.isAfterLast(); allNotes.moveToNext()){

NoteInfo noteInfo = new NoteInfo();

noteInfo.setId(allNotes.getString(allNotes.getColumnIndex(Note._id)));

noteInfo.setTitle(allNotes.getString(allNotes.getColumnIndex(Note.title)));

noteInfo.setContent(allNotes.getString(allNotes.getColumnIndex(Note.content)));

noteInfo.setDate(allNotes.getString(allNotes.getColumnIndex(Note.time)));

noteList.add(noteInfo);

}

}

当EditText内容发生变化时会调用此方法,根据内容变化动态来查询数据库的数据,然后把数据装配到适配器中,从而把列表显示出来

et_title.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

//当EditText内容发生变化时会调用此方法

@Override

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

if (charSequence.toString().equals(“”)){

search_del.setVisibility(View.GONE);

}else{

search_del.setVisibility(View.VISIBLE);

}

String titleChange=et_title.getText().toString();

Log.v(“改变数据:”,titleChange);

getSelectNoteList(titleChange);

mListAdapter.notifyDataSetChanged();

}

@Override

public void afterTextChanged(Editable editable) {

}

});

通过按钮来实现查询


这个方法没有第一种方法人性化,用户体验较差

给查询按钮添加一个监听器

private void setListener(){

addBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Intent intent = new Intent(MainActivity.this,EditActivity.class);

startActivity(intent);

}

});

selectBtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String edit_title=et_title.getText().toString();

HashMap<Integer,HashMap<String,Object>> map1=new HashMap<Integer,HashMap<String,Object>>();;

map1=Note.getNote(dbHelper,edit_title);

Log.v(“查询”,map1.toString());

Intent intent = new Intent(MainActivity.this,SelectActivity.class);

intent.putExtra(“edit_title”,edit_title );

startActivity(intent);

//getSelectNoteList(edit_title);

}

});

清空文本框


在这里插入图片描述

把EditTtext的内容置为空

search_del.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

getNoteList();;//初始化数据

et_title.setText(“”);

mListAdapter.notifyDataSetChanged();//更新RecycleView

}

});

插入本地图片和拍照插入图片

========================================================================

插入图片有多种方式,这里简单介绍两种,分别是从本地获取图片以及拍照直接插入图片。

首先要申请权限


在AndroidManifest.xml中设置权限

如果是Android7.0以上的版本需要在onCreate()这个方法中加入以下代码,不然启动拍照功能的时候会出现路径不对的问题:

// android 7.0系统解决拍照的问题

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();

StrictMode.setVmPolicy(builder.build());

builder.detectFileUriExposure();

插入本地图片


通过设置intent的类型来启动图片相关的intent

//从相册取图片

public void getPhoto() {

Intent intent = new Intent();

intent.setType(“image/*”);

intent.setAction(Intent.ACTION_OPEN_DOCUMENT);

startActivityForResult(intent, PHOTO_FROM_GALLERY);

}

通过使用正则表达式来提取图片路径

private static final String regex=“content://com.android.providers.media.documents/”

+“document/image%\w{4}”;

private static final String reg=“file:///storage/emulated/0/\d+.jpg”;

拍照插入图片


获取权限并且启动拍照相关的intent

//拍照取照片

public void takeCamera() {

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions( this, new String[] { Manifest.permission.CAMERA }, PHOTO_FROM_CAMERA);

}

else {

File file=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+“.jpg”);

try {

if(file.exists()){

file.delete();

}

file.createNewFile();

}catch (IOException e){

e.printStackTrace();

}

imageUri=Uri.fromFile(file);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);

startActivityForResult(intent, PHOTO_FROM_CAMERA);

}

}

图片处理


把图片转换形式并加入文本框,执行保存时把图片存进数据库

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

ContentResolver resolver = getContentResolver();

super.onActivityResult(requestCode, resultCode, data);

//第一层switch

switch (requestCode) {

case PHOTO_FROM_GALLERY:

//第二层switch

switch (resultCode) {

case RESULT_OK:

if (data != null) {

Uri uri = data.getData();//获取Intent uri

Bitmap bitmap = null;

//判断该路径是否存在

try {

Bitmap originalBitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri));

bitmap = resizeImage(originalBitmap, 200, 200);//图片缩放

} catch (FileNotFoundException e) {

e.printStackTrace();

}

if(bitmap != null){//如果图片存在

//将选择的图片追加到EditText中光标所在位置

int index = mText.getSelectionStart(); //获取光标所在位置

Editable edit_text = mText.getEditableText();//编辑文本框

if(index <0 || index >= edit_text.length()){

edit_text.append(uri.toString());

updateNoteText(mText.getText().toString());//更新到数据库

}else{

edit_text.insert(index,uri.toString());

updateNoteText(mText.getText().toString());//更新到数据库

}

}else{

Toast.makeText(NoteEditor.this, “获取图片失败”, Toast.LENGTH_SHORT).show();

}

}

break;

case RESULT_CANCELED:

break;

}

break;

case PHOTO_FROM_CAMERA:

if (resultCode == RESULT_OK) {

Bitmap originalBitmap1=null;

//判断图片是否存在

try{

originalBitmap1=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));

}catch (FileNotFoundException e){

e.printStackTrace();

}

if(originalBitmap1 != null){//如果图片存在保存URI

//将选择的图片追加到EditText中光标所在位置

int index = mText.getSelectionStart(); //获取光标所在位置

Editable edit_text = mText.getEditableText();//编辑文本框

if(index <0 || index >= edit_text.length()){

edit_text.append(imageUri.toString());

updateNoteText(mText.getText().toString());//更新到数据库

}else{

edit_text.insert(index, imageUri.toString());

updateNoteText(mText.getText().toString());//更新到数据库

}

}else{

Toast.makeText(NoteEditor.this, “获取图片失败”, Toast.LENGTH_SHORT).show();

}

} else {

Log.e(“result”, “is not ok” + resultCode);

}

break;

default:

break;

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节

[外链图片转存中…(img-4HsNRpwg-1712196551287)]

整理不易,望各位看官老爷点个关注转发,谢谢!祝大家都能得到自己心仪工作。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/804396
推荐阅读
相关标签
  

闽ICP备14008679号