Android 记事本功能的简单实现,抖音四面被拒再战头条终获offer

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{

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

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的小伙伴私信【学习】我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

直接点击链接也可以领取哦!

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的小伙伴私信【学习】我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

直接点击链接也可以领取哦!

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

[外链图片转存中…(img-myReAqov-1711137332202)]

[外链图片转存中…(img-605UIpLY-1711137332202)]

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

[外链图片转存中…(img-JssvekM6-1711137332202)]

  • Android BAT大厂面试题(有解析)

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单Android Studio记事本应用程序的实现示例: 1. 创建一个新的Android Studio项目,并在activity_main.xml文件中添加以下代码: ``` <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="top|start" android:inputType="textMultiLine" android:minLines="10" android:scrollbars="vertical" android:text="@string/default_text" /> ``` 2. 在MainActivity.java文件中添加以下代码: ``` public class MainActivity extends AppCompatActivity { private EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText) findViewById(R.id.editText); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_save: saveFile(); return true; case R.id.action_open: openFile(); return true; case R.id.action_clear: clearText(); return true; default: return super.onOptionsItemSelected(item); } } private void saveFile() { String text = mEditText.getText().toString(); if (!TextUtils.isEmpty(text)) { try { File file = createFile(); FileOutputStream fos = new FileOutputStream(file); fos.write(text.getBytes()); fos.close(); Toast.makeText(this, "File saved successfully", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "Error saving file", Toast.LENGTH_SHORT).show(); } } } private void openFile() { try { File file = getFile(); FileInputStream fis = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(fis)); StringBuilder sb = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sb.append(line); sb.append("\n"); } reader.close(); mEditText.setText(sb.toString()); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "Error opening file", Toast.LENGTH_SHORT).show(); } } private void clearText() { mEditText.setText(""); } private File createFile() throws IOException { File dir = getFilesDir(); String fileName = "note.txt"; File file = new File(dir, fileName); if (!file.exists()) { file.createNewFile(); } return file; } private File getFile() { File dir = getFilesDir(); String fileName = "note.txt"; File file = new File(dir, fileName); return file; } } ``` 在这个代码中,我们创建了一个包含EditText的主活动,并在菜单中添加了保存,打开和清空文本的选项。当用户点击保存选项时,应用程序将文本保存到名为“note.txt”的文件中。当用户点击打开选项时,应用程序将打开名为“note.txt”的文件并将其文本显示在EditText中。当用户点击“清空”选项时,EditText将被清空。 请注意,此示例仅用于演示目的,并未进行输入验证或错误处理。在实际应用程序中,您应该执行更多的错误检查和验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值