Android开发之记事本(改)
基于Android的快捷记事本的设计与实现
![基于Android的快捷记事本的设计与实现](https://img.taocdn.com/s3/m/255ee92354270722192e453610661ed9ad5155de.png)
基于Android的快捷记事本的设计与实现快捷记事本是一款方便快捷的应用软件,以实现记录、存储用户信息为主要功能,广泛用于工作、学习、生活等领域。
本文将介绍基于Android平台的快捷记事本的设计与实现。
一、需求分析1.实现记录、存储功能:支持用户输入文本、语音等各种形式的信息记录,并能够进行相应的存储。
2.提供便捷的输入方式:支持键盘输入、语音输入等方式,同时可设置快捷键。
3.具备快速搜索功能:支持输入关键字,实现快速查找相应记录的功能。
4.实现备份与恢复:支持备份用户数据到云端,以便在升级或更换设备时恢复数据。
二、技术方案考虑到Android平台上已经有很多开源的第三方库可以使用,本项目的技术方案将采用如下技术:1.使用SQLite数据库:适合轻量级数据存储,具有很好的性能。
2.采用Material Design设计风格:能够为用户提供良好的交互体验。
3.使用开源框架Retrofit实现数据备份与恢复:Retrofit是一款常用的网络框架,可以快速简单地实现网络操作。
4.使用百度语音识别SDK实现语音输入:百度语音识别SDK提供了语音输入到文本的功能,可以为用户提供便利的输入方式。
5.采用MVP设计模式:MVP设计模式使得代码结构更加清晰,易于维护和扩展。
三、界面设计1.主界面:列出所有的事项记录,支持搜索、添加、删除操作。
2.编辑界面:支持文本输入、语音输入、保存、取消操作。
3.设置界面:支持设置快捷键、备份与恢复数据。
四、功能实现(一)SQLite数据库的实现使用SQLiteOpenHelper实现数据库的创建和升级,使用SQLiteDatabase实现数据库的增删改查操作,具体代码如下:1.创建数据库public class NoteDatabaseHelper extends SQLiteOpenHelper {public static final String DATABASE_NAME = "note.db";public static final int DATABASE_VERSION = 1;@Overridepublic void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {sqLiteDatabase.execSQL(NoteContract.SQL_DELETE_ENTRIES);onCreate(sqLiteDatabase);}}2.增加记录public void addNote(Note note) {SQLiteDatabase db = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(NoteContract.NoteEntry.COLUMN_NAME_TITLE, note.getTitle());values.put(NoteContract.NoteEntry.COLUMN_NAME_CONTENT,note.getContent());values.put(NoteContract.NoteEntry.COLUMN_NAME_DATE, note.getDate());db.insert(NoteContract.NoteEntry.TABLE_NAME, null, values);db.close();}3.删除记录(二)语音输入的实现使用百度语音识别SDK实现语音输入,具体步骤如下:1.引入百度语音识别的SDK依赖:4.启动语音输入:(三)数据备份与恢复的实现使用Retrofit框架实现数据备份与恢复,具体步骤如下:1.引入Retrofit框架依赖:compile 'com.squareup.retrofit2:retrofit:2.0.2'compile 'com.squareup.retrofit2:converter-gson:2.0.2'2.定义一个接口,使用@POST注解实现向云端备份数据,使用@GET注解实现从云端恢复数据:public interface NoteService {@POST("/notes")Call<List<Note>> uploadNotes(@Body List<Note> notes);4.使用Retrofit对象创建NoteService接口的实例:NoteService noteService = retrofit.create(NoteService.class);5.使用noteService实现备份和恢复数据:(四)MVP架构的实现采用MVP架构,将View、Presenter和Model分离,使得代码结构更加清晰易于维护。
基于Android平台的记事本App的开发与实现
![基于Android平台的记事本App的开发与实现](https://img.taocdn.com/s3/m/6ca5b904bc64783e0912a21614791711cc797965.png)
第35卷第12期2020年12月/黑亠评紅芳F2学报Journal of Leshan Normal UniversityNo.12Vol.35Dec.,2020DOI:10.16069/ki.51-1610/g4.2020.12.008基于Android平台的记事本App的开发与实现江志华1,陈翱天2(1.乐山师范学院人工智能学院,四川乐山614000; 2.北京交通大学计算机与信息技术学院,北京100044)摘要:文章介绍了基于Android的智能终端完成记事本App客户端及服务端的开发与实现过程。
该App基于MVC 模式,使用fragment,sqlite等技术,实现了信息的富文本编辑与查询、用户注册与登录、信息上传至服务器、PC端的后台管理等功能。
记事本App的使用,丰富了人们记录内容的形式,提高了记录信息的效率,为工作和生活提供了便利。
关键词:Java;Android;MySQL;系统实现中图分类号:TP311.1文献标志码:A文章编号:1009-8666(2020)12-0049-060引言随着移动互联网的发展,移动智能终端设备在人们工作生活中起着越来越重要的作用。
在人们日常学习和工作中经常需要快速高效地记录许多信息,然而传统的记录方式已经满足不了这种需求,因此开发一款能够便捷、高效运行在移动智能终端设备上的记事本App变得很有必要[1]。
在文献[1]中作者利用语音识别以及合成技术将语音转换成文字,通过云存储技术存储用户的笔记数据,设计实现了一款语音云记事本软件。
在文献[2-5]中作者仅实现了记事本文本增删改查、检索以及信息分享、同步等基本功能。
现有记事本App大多只实现了基本的信息记录功能,功能较单一,记录的信息类型也仅限于文本类信息;缺少用户身份验证功能,存在一定的安全隐患,一旦用户的安卓设备丢失,用户的笔记数据就可能会泄漏。
本文开发实现的记事本App集多种功能于一体,在实现信息记录基本功能的基础上,还实现了用户安全验证、信息云备份等功能。
Android记事本
![Android记事本](https://img.taocdn.com/s3/m/1f39e5234b35eefdc8d333eb.png)
1.只是在主程序里面添加此代码:TextView textView = new TextView(this);textView.setText("你好啊");setContentView(textView);就会在Android虚拟机上显示“你好啊”2.只在Main.xml里面添加代码:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="你好"/>3.4.设置超链接:android:autoLink=”all”5.跑马灯:android:singleLine=”true”把所以要跑马灯的都显示成一行android:focusable="true"android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever"android:focusableInTouchMode="true"6.设置字体颜色:TextView tv = (TextView) findViewById();String str = "欢迎大家收看《Android开发从零开始》系列课程,感谢大家的支持。
";SpannableStringBuilder style = new SpannableStringBuilder(str); style.setSpan(new ForegroundColorSpan(Color.RED), 0, 6,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);style.setSpan(new ForegroundColorSpan(Color.GREEN), 6, 21,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);style.setSpan(new ForegroundColorSpan(Color.BLUE), 21, 26,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(style);7.8.@动画,是android 自带的an1.setDuration(1000);休息的时间问1000毫秒imgv1.startAnimation(an1);// startAnimation 启动动画9.给自己的界面设置空间大小Android:layout_weight=”X”10.实现图片的循环a先取得getContext的返回最大值Public int getContext(){Return Integer.MAX_VALUE;}b有就是设置图片给ImageView对象Imageview.setImageResource(resides[position%resIds.length]);c.我们还可以给图片添加一个边框首先定义一个int mGalleryItemBackground;,然后取得Gallery属性的Index id的值public ImageAdapter(Context c) {mContext = c;// 使用在res/value/attrs.xml中的Gallery属性TypedArray a = obtainStyledAttributes(R.styleable.Gallery);// 取得Gallery属性的Index idmGalleryItemBackground = a.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);// 让对象的styleable属性能够反复使用a.recycle();}在res/value/attrs.xml的代码<declare-styleable name="Gallery"><attr name="android:galleryItemBackground"/></declare-styleable>11.AlertDialog的使用AlertDialog.Builder builder = new AlertDialog.Builder(C018_onDoubleClickActivity.this);builder.setTitle("双击");builder.setMessage("Very Good");builder.show();图片的淡进淡出:AlphaAnimationaa = new AlphaAnimation(1, 0);// 1, 0从透明到不透明图片的移动:TranslateAnimationta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF, 0.5f);ta.setDuration(3000); //显示的时间startAnimation(al);//启动startAnimation(ta);图片的旋转:RotateAnimationra = new RotateAnimation(0, 720, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);图片的伸缩:ScaleAnimationsa = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);帧动画Alpha渐变效果共同属性fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValueTabHost添加背景图片tabHost.addTab(tabHost.newTabSpec("Second").setIndica tor("Second",getResources().getDrawable(android.R.dra wable.alert_dark_frame)));用Timer获取系统的时间;;@Overridepublicint onStartCommand(Intent intent, int flags, int startId) {timer = new Timer();task = new TimerTask() {@Overridepublicvoid run() {Calendar c = Calendar.getInstance();String time = c.get(Calendar.HOUR_OF_DAY) + ":"+ c.get(Calendar.MINUTE) + ":" +c.get(Calendar.SECOND);System.out.println(time);}};timer.schedule(task, 1000, 1000);returnsuper.onStartCommand(intent, flags, startId);}。
安卓记事本开发报告
![安卓记事本开发报告](https://img.taocdn.com/s3/m/9932f0fa4afe04a1b071de91.png)
基于Android平台记事本的设计与实现1.设计目的记事本的基本功能就是记事,手机用户首先用到的就是文本记事,输入事务信息以文本的形式展现出来,存储起来。
随着用户需求的增加,可能希望用图形来代替文本来记事,用户之间打开记事本,看到图片就能联系自己所记载的事务信息。
这样免去了输入文字的麻烦,反而会更简单。
又或者是文本与图片的交叉运用,可以让用户自己选择自己喜欢的记事方式,更加自由与便捷。
所以此功能的意义是让简单的记事信息能以文本、图文和视频表达,更加丰富多彩。
2.设计内容本设计的基本内容是在Android平台下,设计与实现记事本软件。
具体要实现的功能是:(1)设计实现添加“文字”,“图文”,“视频”这三个主要的功能模块。
(2)进入添加后,有“保存”,“取消”两种选择。
(3)主页面显示记事列表,点击可查看及时内容,并有“删除”,“返回”两种选择。
(4)进行测试并分析结果。
3.开发环境的安装与配置3.1 Android开发平台搭建本设计主要是以Eclipse为基础,安装SDK和ADT插件后,用来开发安卓项目。
开发平台搭建步骤介绍如下。
(1)下载JDK并安装,安装后配置环境变量。
(2)下载Eclipse解压至指定文件夹。
(3)下载SDK后解压至指定文件夹,打开SDK目录,点击SDK Manager安装开发安卓项目需要的包。
(4)启动Eclipse,进入Help—>Install New Software—>Add,添加ADT插件。
(5)进入Window—>Android—>Browse,选择SDK安装目录。
3.2硬件环境Android设备,如Android手机或平板电脑,主频在1Ghz及以上,内存为512MB以上,系统版本为Android2.1及以上。
本设计使用Android4.4.4的手机。
3.3 软件环境操作系统:windows10IDE:EclipseAndroid SDK 集成环境4.设计主体架构4.1 src文件夹src文件夹下com.liwenhuan.notepad包下为系统主要Activity类:NotesDB.java是进行数据储存的,通过SQLite保存数据。
Android模块化开发项目式教程PPT-Android记事本设计
![Android模块化开发项目式教程PPT-Android记事本设计](https://img.taocdn.com/s3/m/97509902998fcc22bdd10d5f.png)
6
模块5 记事本
知识储备
5.1、操作栏(Action Bar)
在Android 3.0之后,操作栏Action Bar主要是用于代替传统的标题栏的, 图5-1所示的就是一个操作栏。在操作栏的左侧显示是应用程序的图标和标题, 右侧显示了一些主要操作如删除和保存菜单项,以及溢出(overflow)菜单。
创建一个上下文菜单的步骤: 第一步,创建上下文菜单项 ; 第二步,响应菜单的单击事件; 第三步:调用 registerForContextMenu()方法,为视图注册上下文。
13
模块5 记事本
知识储备
5.5、AlertDialog对话框
在Android开发中,经常会需要在Android界面上弹出一些对话框,用于接受用户之 间的交互,因此,对话框一般用于显示提示信息和选择与当前应用程序直接相关的功能。
在Android中主要提供了4种对话框: AlertDialog:功能丰富,应用最广泛的对话框。 ProgressDialog:进度对话框,可显示一个进度环或者一个进度条效果的对话框。 DatePickerDialog:日期选择对话框,具有日期选择效果的对话框。 TimePickerDialog:时间选择对话框,具有时间选择效果的对话框。
4
模块5 记事本
项目描述
本项目将实现的记事本功能如下: 1.将记事本中的数据用ListView组件列表显示在手机界面上。 2.在记事本列表界面上通过选项菜单设计“添加数据”菜单,并实现对记事本数 据添加。 3.在ListView组件的item上可弹出含有编辑和删除项的上下文菜单,并在数据修 改与删除时,可通过对话框提供相关操作的提示信息。 4.运用SQLite数据库实现对记事本中数据的添加、查询、编辑和删除操作。
Android学习资料之一个记事本应用程序范例
![Android学习资料之一个记事本应用程序范例](https://img.taocdn.com/s3/m/5e9046eb998fcc22bcd10db6.png)
本教程通过手把手教你的方式,讲解如何利用Android框架 和诸多工具建立自己的手机应用。从一个预先配置好的工程 文件开始,该教程通过一个简单记事本应用程序完整的开发 过程,并辅以贯穿始终的详尽例子,指导你如何搭建工程、 组织应用逻辑以及UI,乃至接下来的编译及运行可执行程序 等等。 该教程将这个记事本应用的开发过程视作一组练习(见如下), 每一个练习都由若干步骤组成。你可以亦步亦趋地完成每个 练习步骤,逐步建立并完善自己的应用程序。这些练习提供 了你实现此应用所需的——细到每一步骤的——具体范例代 码。 当你完成此教程后,一个具有实际功能的Android应用就从 你手上诞生了,并且你对Android应用开发中的一些极为重 要的概念也会有更加深刻的理解。
千锋3G嵌入式移动互联网技术研发培训中心 千锋3G嵌入式移动互联网技术研发培训中心 3G
下表列出了本教程的一些练习,并描述每一练习所 涵盖的开发训练内容。每一练习都是基于你已完成 之前的任一练习这一前提来展开的。
千锋3G嵌入式移动互联网技术研发培训中心 千锋3G嵌入式移动互联网技术研发培训中心 3G
为应用程序添加对Event生命周期的控制,以得到 应用程序在整个生命周期中的状态。参见《教程: 教程: 教程 练习 3》
千锋3G嵌入式移动互联网技术研发培训中心 千锋3G嵌入式移动互联网技术研发培训中心 3G
一个简单记事本应用程序的开发过程起始于此。构 建一个可以添加新便笺,但不能编辑的简单便笺列 表。演示ListActivity 的基本方面以及如何创建和 控制菜单项,以及如何用一个SQLite数据库存储便 笺内容。参见《教程:练习1》 教程: 教程 练习1 /view/40f6326748d 7c1c708a14596.html
Android实现记事本功能
![Android实现记事本功能](https://img.taocdn.com/s3/m/3463921fba68a98271fe910ef12d2af90242a8e4.png)
Android实现记事本功能本⽂实例为⼤家分享了Android实现记事本功能的具体代码,供⼤家参考,具体内容如下实现功能1、⽂本数据的存储2、图⽚数据存储3、视频数据存储4、⾃定义的Adapter5、SQlite的创建6、数据listview列表的显⽰demo地址界⾯布局<LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="⽂字" /><Buttonandroid:id="@+id/img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="图⽂" /><Buttonandroid:id="@+id/video"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="视频" /></LinearLayout><ListViewandroid:id="@+id/list"android:layout_width="fill_parent"android:layout_height="wrap_content" ></ListView></LinearLayout>数据库创建public class NotesDB extends SQLiteOpenHelper {public static final String TABLE_NAME = "notes";public static final String CONTENT = "content";public static final String PATH = "path";public static final String VIDEO = "video";public static final String ID = "_id";public static final String TIME = "time";public NotesDB(Context context) {super(context, "notes", null, 1);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + ID+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT+ " TEXT NOT NULL," + PATH + " TEXT NOT NULL," + VIDEO+ " TEXT NOT NULL," + TIME + " TEXT NOT NULL)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} }数据的加载public class AddContent extends Activity implements OnClickListener {private String val;private Button savebtn, deletebtn;private EditText ettext;private ImageView c_img;private VideoView v_video;private NotesDB notesDB;private SQLiteDatabase dbWriter;private File phoneFile, videoFile;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.addcontent);//主界⾯点击Button传递过来的数据val = getIntent().getStringExtra("flag");savebtn = (Button) findViewById(R.id.save);deletebtn = (Button) findViewById(R.id.delete);ettext = (EditText) findViewById(R.id.ettext);c_img = (ImageView) findViewById(R.id.c_img);v_video = (VideoView) findViewById(R.id.c_video);savebtn.setOnClickListener(this);deletebtn.setOnClickListener(this);notesDB = new NotesDB(this);dbWriter = notesDB.getWritableDatabase();initView();}//判断存储的是⽂字,图⽚,还是视频,启动相对应的控件public void initView() {if (val.equals("1")) { // ⽂字c_img.setVisibility(View.GONE);v_video.setVisibility(View.GONE);}if (val.equals("2")) {c_img.setVisibility(View.VISIBLE);v_video.setVisibility(View.GONE);Intent img = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);phoneFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/" + getTime() + ".jpg");img.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile));startActivityForResult(img, 1);}if (val.equals("3")) {c_img.setVisibility(View.GONE);v_video.setVisibility(View.VISIBLE);Intent video = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);videoFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile() + "/" + getTime() + ".mp4");video.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoFile));startActivityForResult(video, 2);}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.save:addDB();finish();break;case R.id.delete:finish();break;}}//存储数据public void addDB() {ContentValues cv = new ContentValues();cv.put(NotesDB.CONTENT, ettext.getText().toString());cv.put(NotesDB.TIME, getTime());cv.put(NotesDB.PATH, phoneFile + "");cv.put(NotesDB.VIDEO, videoFile + "");dbWriter.insert(NotesDB.TABLE_NAME, null, cv);}//时间的显⽰private String getTime() {SimpleDateFormat format = new SimpleDateFormat("yyyy年MM⽉dd⽇ HH:mm:ss"); Date curDate = new Date();String str = format.format(curDate);return str;}//完成数据拍摄后直接显⽰数据@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1) {Bitmap bitmap = BitmapFactory.decodeFile(phoneFile.getAbsolutePath());c_img.setImageBitmap(bitmap);}if (requestCode == 2) {v_video.setVideoURI(Uri.fromFile(videoFile));v_video.start();}}}⾃定义Adapterpublic class MyAdapter extends BaseAdapter {private Context context;private Cursor cursor;private LinearLayout layout;public MyAdapter(Context context, Cursor cursor) {this.context = context;this.cursor = cursor;}@Overridepublic int getCount() {return cursor.getCount();}@Overridepublic Object getItem(int position) {return cursor.getPosition();}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(context);layout = (LinearLayout) inflater.inflate(yout.cell, null);TextView contenttv = (TextView) layout.findViewById(R.id.list_content); TextView timetv = (TextView) layout.findViewById(R.id.list_time);ImageView imgiv = (ImageView) layout.findViewById(R.id.list_img);ImageView videoiv = (ImageView) layout.findViewById(R.id.list_video); cursor.moveToPosition(position);String content = cursor.getString(cursor.getColumnIndex("content"));String time = cursor.getString(cursor.getColumnIndex("time"));String url = cursor.getString(cursor.getColumnIndex("path"));String urlvideo = cursor.getString(cursor.getColumnIndex("video"));contenttv.setText(content);timetv.setText(time);imgiv.setImageBitmap(getImageThumbnail(url, 200, 200));videoiv.setImageBitmap(getVideoThumbnail(urlvideo, 200, 200,MediaStore.Images.Thumbnails.MICRO_KIND));return layout;}/** ListView 显⽰图⽚*/public Bitmap getImageThumbnail(String uri, int width, int height) {Bitmap bitmap = null;BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;bitmap = BitmapFactory.decodeFile(uri, options);options.inJustDecodeBounds = false;int beWidth = options.outWidth / width;int beHeight = options.outHeight / height;int be = 1;if (beWidth < beHeight) {be = beWidth;} else {be = beHeight;}if (be <= 0) {be = 1;}options.inSampleSize = be;bitmap = BitmapFactory.decodeFile(uri, options);bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;}/**视频缩略图*/private Bitmap getVideoThumbnail(String uri, int width, int height, int kind) { Bitmap bitmap = null;bitmap = ThumbnailUtils.createVideoThumbnail(uri, kind);bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);return bitmap;}}ListView点击的详情页显⽰与数据删除public class SelectAct extends Activity implements OnClickListener {private Button s_delete, s_back;private ImageView s_img;private VideoView s_video;private TextView s_tv;private NotesDB notesDB;private SQLiteDatabase dbWriter;/** 点击item 的详情页对数据进⾏删除操作*/@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.select);s_delete = (Button) findViewById(R.id.s_delete);s_back = (Button) findViewById(R.id.s_back);s_img = (ImageView) findViewById(R.id.s_img);s_video = (VideoView) findViewById(R.id.s_video);s_tv = (TextView) findViewById(R.id.s_tv);/**读写权限*/notesDB = new NotesDB(this);dbWriter = notesDB.getWritableDatabase();s_back.setOnClickListener(this);s_delete.setOnClickListener(this);//判断是否存在图⽚if (getIntent().getStringExtra(NotesDB.PATH).equals("null")) {s_img.setVisibility(View.GONE);} else {s_img.setVisibility(View.VISIBLE);}if (getIntent().getStringExtra(NotesDB.VIDEO).equals("null")) {s_video.setVisibility(View.GONE);} else {s_video.setVisibility(View.VISIBLE);}// 设置需要显⽰的图⽚s_tv.setText(getIntent().getStringExtra(NotesDB.CONTENT));Bitmap bitmap = BitmapFactory.decodeFile(getIntent().getStringExtra(NotesDB.PATH));s_img.setImageBitmap(bitmap);s_video.setVideoURI(Uri.parse(getIntent().getStringExtra(NotesDB.VIDEO)));s_video.start();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.s_delete:deleteDate();finish();break;case R.id.s_back:finish();break;}}//数据的删除public void deleteDate() {dbWriter.delete(NotesDB.TABLE_NAME,"_id=" + getIntent().getIntExtra(NotesDB.ID, 0), null);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
基于android的记事本开发
![基于android的记事本开发](https://img.taocdn.com/s3/m/03f0f37248d7c1c708a145ad.png)
南京晓庄学院【智能终端移动开发技术课程考察报告】《基于android的记事本设计》所在院(系): 信息工程学院学号:学生姓名:年级专业:****:**这里的图片和视屏都是保存在sd卡里面的。
在数据库中只是其存放路径,起名字是获取当前拍摄的时间。
3.2.4、在主界面中可以查看之前存储的文字、图片、视频点击你想要查看的记录即可。
3.2.5、删除和修改当用户点击想查看的记录,会跳入这条记录中这是用户可以修改这条记录中的内容,也可通过底部的删除按钮删除按钮3.3 、主要的模块结构图1、Java事件结构图,图1java事件结构图AddContent.java用来选择增加内容,为文字或者图片或视频。
有对应的布局文件MainActivity.java主活动调用数据,和增加监听事件。
MyAdapter.java主要是获取缩略图。
NotesDB.java主要是写创建数据库SelectAct.java主要详情页,有对应的布局文件,select.xml图2、布局文件结构图图2布局文件结构图Activity_main.xml主界面布局图Addcontent.xml对应的增加内容布局文件Cell.xml显示存储的界面布局Select.xml添加或修改图片视频布局。
4、主要代码分析4.4.1、首先创建了数据库。
NotesDB.java中扩张于SQLiteOpenHelper构建onCreate方法,在onUpgrade方法中更新数据库。
onCreate方法中用db.execSQL创建。
我们当前并不需要更新所以不用。
CREATE TABLE " + TABLE_NAME(表名)ID+ " INTEGER PRIMARY KEY AUTOINCREMENT,"(ID主键自增。
)CONTENT+ " TEXT NOT NULL,"(内容,内容不能为空。
)PATH + " TEXT NOT NULL,"(图片,图片不能为空。
Androidstudio记账本课程设计
![Androidstudio记账本课程设计](https://img.taocdn.com/s3/m/80481fa8f80f76c66137ee06eff9aef8941e48a9.png)
Androidstudio记账本课程设计一、课程目标知识目标:1. 理解Android Studio的基础界面与功能,掌握Android应用开发的基本流程;2. 学会使用Android Studio创建项目、编写代码、调试应用;3. 掌握利用SQLite数据库在Android应用中进行数据存储与查询;4. 了解记账本应用的功能模块及设计思路。
技能目标:1. 能够独立使用Android Studio搭建简单的记账本应用框架;2. 能够编写代码实现记账本的增、删、改、查功能;3. 能够运用所学知识解决实际开发中遇到的问题;4. 能够对开发过程中出现的问题进行调试与优化。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,提高创新意识和动手能力;2. 增强学生团队协作能力,培养沟通与分享的良好习惯;3. 培养学生关注生活、关注实际问题的意识,学会将所学知识应用于实际生活。
本课程针对高年级学生,结合Android Studio与SQLite数据库知识,旨在使学生掌握移动应用开发的基本技能。
课程注重实践操作,培养学生解决实际问题的能力,同时提高学生的团队协作与沟通能力,使学生在学习过程中形成积极向上的情感态度和价值观。
通过本课程的学习,学生能够具备独立开发简单记账本应用的能力,为今后的学习和发展奠定基础。
二、教学内容1. Android Studio基本操作与界面介绍:包括新建项目、导入导出项目、代码编写与调试等;相关章节:教材第1章 Android Studio环境搭建与基本操作。
2. 记账本应用需求分析与设计:功能模块划分、界面设计、数据库设计;相关章节:教材第2章 Android应用设计思路与需求分析。
3. SQLite数据库在Android应用中的使用:创建数据库、数据表,实现数据的增删改查;相关章节:教材第3章 SQLite数据库操作。
4. 记账本功能实现:编写界面布局代码,实现界面跳转与数据传递,编写数据操作代码;相关章节:教材第4章 Android界面布局与第5章 Activity与数据传递。
Android实现记事本功能(26)
![Android实现记事本功能(26)](https://img.taocdn.com/s3/m/ce84faf818e8b8f67c1cfad6195f312b3169eb47.png)
Android实现记事本功能(26)本⽂实例为⼤家分享了Android实现记事本功能的具体代码,供⼤家参考,具体内容如下MainActivity.java代码:package siso.smartnotef.activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;import siso.smartnotef.R;import siso.smartnotef.adapter.NotepadeAdapter;import siso.smartnotef.db.DataHelper;import siso.smartnotef.global.GlobalParams;import siso.smartnotef.model.NotepadBean;import siso.smartnotef.model.NotepadWithDataBean;import siso.smartnotef.service.MainService;public class MainActivity extends AppCompatActivity implements View.OnClickListener, NotepadeAdapter.ClickFunction {private TextView tv_add;private ListView lv_contents;private List<NotepadWithDataBean> notepadWithDataBeanList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);Intent intent1 = new Intent(MainActivity.this, MainService.class);startService(intent1);findViews();setListeners();initView();}private void findViews() {tv_add = (TextView) findViewById(_add);lv_contents = (ListView) findViewById(R.id.lv_content);}private void setListeners() {tv_add.setOnClickListener(this);}private void initView() {DataHelper helper = new DataHelper(MainActivity.this);notepadWithDataBeanList = new ArrayList<NotepadWithDataBean>();List<NotepadBean> notepadBeanList = helper.getNotepadList();for (int i = 0; i < notepadBeanList.size(); i++) {if (0 == notepadWithDataBeanList.size()) {NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean();notepadWithDataBean.setData(notepadBeanList.get(0).getDate());notepadWithDataBeanList.add(notepadWithDataBean);}boolean flag = true;for (int j = 0; j < notepadWithDataBeanList.size(); j++) {int date = notepadWithDataBeanList.get(j).getData();if (date == notepadBeanList.get(i).getDate()) {notepadWithDataBeanList.get(j).getNotepadBeenList().add(notepadBeanList.get(i));flag = false;break;}}if (flag) {NotepadWithDataBean notepadWithDataBean = new NotepadWithDataBean();notepadWithDataBean.setData(notepadBeanList.get(i).getDate());notepadWithDataBeanList.add(notepadWithDataBean);notepadWithDataBeanList.get(notepadWithDataBeanList.size() - 1).getNotepadBeenList().add(notepadBeanList.get(i));}}NotepadeAdapter adapter = new NotepadeAdapter(MainActivity.this, notepadWithDataBeanList, this);lv_contents.setAdapter(adapter);// setListViewHeightBasedOnChildren(lv_contents);}public void setListViewHeightBasedOnChildren(ListView listView) {if (listView == null) return;ListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) {// pre-conditionreturn;}int totalHeight = 0;for (int i = 0; i < listAdapter.getCount(); i++) {View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0);totalHeight += listItem.getMeasuredHeight();}youtParams params = listView.getLayoutParams();params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));listView.setLayoutParams(params);}@Overridepublic void onClick(View v) {switch (v.getId()) {case _add:Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_ADD);intent.putExtras(bundle);intent.setClass(MainActivity.this, AddContentActivity.class);startActivityForResult(intent, GlobalParams.ADD_REQUEST);break;}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case GlobalParams.ADD_REQUEST:if (GlobalParams.ADD_RESULT_OK == resultCode) {initView();}break;}}@Overridepublic void clickItem(int position, int itemPosition) {Bundle bundle = new Bundle();bundle.putInt(GlobalParams.TYPE_KEY, GlobalParams.TYPE_EDIT);bundle.putSerializable(GlobalParams.BEAN_KEY, notepadWithDataBeanList.get(position));bundle.putInt(GlobalParams.ITEM_POSITION_KEY, itemPosition);Intent intent = new Intent(this, AddContentActivity.class);intent.putExtras(bundle);startActivityForResult(intent, GlobalParams.ADD_REQUEST);}@Overridepublic void longClickItem(final int position, final int itemPostion) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setMessage("确认删除吗?");builder.setTitle("提⽰");builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {DataHelper helper = new DataHelper(MainActivity.this);helper.deleteNotepad(notepadWithDataBeanList.get(position).getNotepadBeenList().get(itemPostion).getId()); initView();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});builder.create().show();}}AddContentActivity.java代码:package siso.smartnotef.activity;import android.app.DatePickerDialog;import android.app.TimePickerDialog;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.DatePicker;import android.widget.EditText;import android.widget.TextView;import android.widget.TimePicker;import android.widget.Toast;import java.util.Calendar;import siso.smartnotef.R;import siso.smartnotef.db.DataHelper;import siso.smartnotef.global.GlobalParams;import siso.smartnotef.model.NotepadBean;import siso.smartnotef.model.NotepadWithDataBean;public class AddContentActivity extends AppCompatActivity implements View.OnClickListener {private TextView tv_save;private TextView tv_date;private TextView tv_time;private TextView tv_cancel;private EditText et_content;private String time = "";private String date = "";private Bundle bundle;private int type;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_add_content);bundle=getIntent().getExtras();type=bundle.getInt(GlobalParams.TYPE_KEY);findViews();setListeners();initDate();}private void findViews() {et_content=(EditText)findViewById(R.id.et_content);tv_save = (TextView) findViewById(_save);tv_date = (TextView) findViewById(_date);tv_time = (TextView) findViewById(_time);tv_cancel=(TextView)findViewById(_cancel);}private void setListeners() {tv_save.setOnClickListener(this);tv_date.setOnClickListener(this);tv_time.setOnClickListener(this);tv_cancel.setOnClickListener(this);}private void initDate() {Calendar c = Calendar.getInstance();int year=c.get(Calendar.YEAR);int month=c.get(Calendar.MONTH);int day=c.get(Calendar.DAY_OF_MONTH);date=getDate(year,month,day);if(type==GlobalParams.TYPE_EDIT){NotepadWithDataBean notepadWithDataBean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY));et_content.setText(notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getContent()); date=notepadWithDataBean.getData()+"";tv_date.setText(date);time=notepadWithDataBean.getNotepadBeenList().get(bundle.getInt(GlobalParams.ITEM_POSITION_KEY)).getTime();tv_time.setText(time);}}private String getDate(int year,int month,int day){String date="";date+=year;if(month<9){date=date+"0"+(month+1);}else{date+=(month+1);}if(day<10){date=date+"0"+day;}else {date+=day;}return date;}@Overridepublic void onClick(View v) {switch (v.getId()) {case _save:if(type==GlobalParams.TYPE_EDIT){update();}else {save();}break;case _date:selectDateDialog();break;case _time:selectTimeDialog();break;case _cancel:finish();break;}}private void selectDateDialog(){Calendar c = Calendar.getInstance();int year=c.get(Calendar.YEAR);final int month=c.get(Calendar.MONTH)+1;int day=c.get(Calendar.DAY_OF_MONTH);new DatePickerDialog(AddContentActivity.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {date=getDate(year,monthOfYear,dayOfMonth);tv_date.setText(date);}},year,month,day).show();}private void selectTimeDialog() {Calendar c = Calendar.getInstance();int mHour = c.get(Calendar.HOUR_OF_DAY);int mMinute = c.get(Calendar.MINUTE);new TimePickerDialog(AddContentActivity.this,new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view,int hourOfDay, int minute) {time=formatTime(hourOfDay,minute);tv_time.setText(time);}}, mHour, mMinute, true).show();}private String formatTime(int hour,int minute){String time=hour+":";if(minute<10){time=time+"0"+minute;}else{time+=minute;}return time;}private void save() {String content = et_content.getText().toString();if ("".equals(content)) {Toast.makeText(AddContentActivity.this, "请输⼊内容", Toast.LENGTH_SHORT).show();return;}if ("".equals(time)) {Toast.makeText(AddContentActivity.this, "请选择时间", Toast.LENGTH_SHORT).show();return;}NotepadBean notepadBean = new NotepadBean();notepadBean.setContent(content);notepadBean.setDate(Integer.parseInt(date));notepadBean.setTime(time);DataHelper helper = new DataHelper(AddContentActivity.this);helper.insertData(notepadBean);setResult(GlobalParams.ADD_RESULT_OK);finish();}private void update(){DataHelper helper=new DataHelper(AddContentActivity.this);NotepadWithDataBean bean=(NotepadWithDataBean)(bundle.getSerializable(GlobalParams.BEAN_KEY)); int itemPosition=bundle.getInt(GlobalParams.ITEM_POSITION_KEY);helper.update(bean.getNotepadBeenList().get(itemPosition).getId(),date,time,et_content.getText().toString()); setResult(GlobalParams.ADD_RESULT_OK);finish();}}RemindActivity.java代码:package siso.smartnotef.activity;import android.media.MediaPlayer;import android.media.RingtoneManager;import .Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.io.IOException;import siso.smartnotef.R;import siso.smartnotef.global.GlobalParams;public class RemindActivity extends AppCompatActivity {private TextView tv_content;private Button bt_confirm;private MediaPlayer mMediaPlayer;;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_remind);findViews();setListeners();Bundle bundle=getIntent().getExtras();String content=bundle.getString(GlobalParams.CONTENT_KEY);tv_content.setText(content);playSound();}private void findViews(){tv_content=(TextView)findViewById(_content);bt_confirm=(Button) findViewById(R.id.bt_confirm);}private void setListeners(){bt_confirm.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if(null!=mMediaPlayer){mMediaPlayer.stop();finish();}}});}public void playSound() {new Thread(new Runnable() {@Overridepublic void run() {mMediaPlayer = MediaPlayer.create(RemindActivity.this, getSystemDefultRingtoneUri()); mMediaPlayer.setLooping(true);//设置循环try {mMediaPlayer.prepare();} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}mMediaPlayer.start();}}).start();}//获取系统默认铃声的Uriprivate Uri getSystemDefultRingtoneUri() {return RingtoneManager.getActualDefaultRingtoneUri(RemindActivity.this,RingtoneManager.TYPE_RINGTONE);}}activity_main.xml内容:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="siso.smartnotef.activity.MainActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:background="@color/title_color"android:paddingLeft="10dp"android:paddingRight="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:textSize="18sp"android:layout_centerInParent="true"android:text="智能记事本"/><TextViewandroid:id="@+id/tv_add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:text="新增"android:layout_centerVertical="true"android:layout_alignParentRight="true"android:textSize="13sp"/></RelativeLayout><ListViewandroid:id="@+id/lv_content"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView></LinearLayout>activity_add_content.xml内容:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" xmlns:tools="/tools"android:id="@+id/activity_add_content"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="siso.smartnotef.activity.AddContentActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:background="@color/title_color"android:paddingLeft="10dp"android:paddingRight="10dp"><TextViewandroid:id="@+id/tv_cancel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:text="取消"android:textColor="@color/white"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:textSize="18sp"android:layout_centerInParent="true"android:text="智能记事本"/><TextViewandroid:id="@+id/tv_save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:text="保存"android:layout_centerVertical="true"android:layout_alignParentRight="true"/></RelativeLayout><LinearLayoutandroid:layout_marginTop="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_gravity="center_horizontal"><TextViewandroid:id="@+id/tv_date"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="今天"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text=" -- "/><TextViewandroid:id="@+id/tv_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="5dp"android:text="请选择时间"/></LinearLayout><EditTextandroid:id="@+id/et_content"android:layout_marginTop="10dp"android:layout_width="match_parent"android:layout_height="match_parent"android:inputType="textMultiLine"android:gravity="left|top"android:layout_margin="20dp"android:padding="10dp"android:hint="请输⼊内容"android:background="@drawable/edit_back"/></LinearLayout>activity_remind.xml内容:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android" xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"android:orientation="vertical"tools:context="siso.smartnotef.activity.RemindActivity"><TextViewandroid:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal" /><Buttonandroid:id="@+id/bt_confirm"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="取消" /></LinearLayout>AndroidManifest.xml内容:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="siso.smartnotef"><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/Theme.AppCompat.Light.NoActionBar"><activityandroid:name=".activity.MainActivity"android:theme="@style/Theme.AppCompat.Light.NoActionBar"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity><receiver android:name=".receiver.MainReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver><activity android:name=".activity.AddContentActivity" /><serviceandroid:name=".service.MainService"android:enabled="true"android:exported="true" /><activity android:name=".activity.RemindActivity"></activity></application></manifest>项⽬结构如图:项⽬运⾏结果如图:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
基于android的日记本开发
![基于android的日记本开发](https://img.taocdn.com/s3/m/2de1e5ada76e58fafab003c9.png)
西南科技大学课程设计报告课程名称:软件设计基础设计名称:基于android的日记本开发姓名:学号:班级:通信1003班指导教师:起止日期: 11.28——12.12 西南科技大学信息工程学院制方向设计任务书学生班级:通信1003班学生姓名:学号:设计名称:基于android的日记本开发起止日期:11.28——12.12 指导教师:方向设计学生日志基于android的日记本开发一、摘要(150-250字)伴随着无线移动设备的迅速发展,手机的日益普及成为主流,在这一关键时期,Android 系统的推出使手机发展进入了一个新的领域。
世界上一些知名移动设备生产厂商对于Android 智能机的开发热情日益提高,Android系统的使用人群正在急速提升,Android应用程序的多样化使人们从手机中获得更多乐趣,方便着人们的生活,使Android得到了社会越来越多的认同。
本次设计主要描述了基于android开发一个简易日记本的技术方法。
关键字:Android; DbAdapter;Activity;diary二、设计目的和意义在中国,手机已经成为人们日常生活必不可少的一部分,智能手机在高校人群中逐渐得到了普及,Android手机凭借其优秀的系统性能以及良好的用户体验迅速得到了高校师生的青睐。
在高校中,上课并不像高中时期有固定的教室和固定的时间,高校课程种类繁多,并且上课地点和时间不固定,一周内极少会出现重复课程,所以要将课程表完整的记忆下来是一项很艰难的事情,很多同学不得不随身携带一张课表来防止遗忘上课,但是还是不能完全避免该问题的发生,同时,作为一个当今高速发展的时代的成员,适应这个社会是必不能少的,在各种社交场合中,记住一些必须的信息很重要,而它们往往又繁琐又多,不易人为记住。
基于这些问题,有必要设计一款方便小巧的简易日记本程序,可以让用户自定义文件,记住上课时间和地点,从而避免遗忘上课的事情出现,同时记住那些琐碎却有意义的小信息。
Android记事本开发实例详解
![Android记事本开发实例详解](https://img.taocdn.com/s3/m/925f5e1853ea551810a6f524ccbff121dd36c506.png)
这个ac<action android:name="android.intent.action.VIEW" /><action android:name="android.intent.action.EDIT" /><action android:name="com.android.notepad.action.EDIT_NOTE" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="vnd.android.cursor.item/vnd.google.note" /></intent-filter><!-- This filter says that we can create a new note inside of a directory of notes. --><intent-filter><action android:name="android.intent.action.INSERT" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /></intent-filter></activity>上面第一个intent-filter中有一个action 名为android.intent.action.EDIT,而前面我们创建的Intent也正好是Intent.ACTION_EDIT=” android.intent.action.EDIT”,想必大家已经明白是怎么回事了吧。
android开发记事本实验报告,记事本实验报告(含源代码运行结果).doc
![android开发记事本实验报告,记事本实验报告(含源代码运行结果).doc](https://img.taocdn.com/s3/m/83d13e6b178884868762caaedd3383c4bb4cb48a.png)
android开发记事本实验报告,记事本实验报告(含源代码运⾏结果).doc记事本实验报告(含源代码运⾏结果)嘉应学院计算机学院实验报告系/班别: 计算机学院 1203班指导⽼师: 肖**课程名称: Java语⾔程序设计实验内容: ⽤Java编写记事本学⽣学号:学⽣姓名: 曾朝阳实验地点: 锡科403实验类型: 设计实验时间: 第⼗四周⾄第⼗七周实验要求:能够通过使⽤JDK1.6安装开发windows 桌⾯应⽤程序。
实验⽬的:熟悉事件触发和事件监听以及组件和容器的界⾯安排,能够⽤java设计⼀个仿windows的标准型记事本。
实验过程描述:实验环境:⽹络实验室实验设备:PC机, ⽹络实验平台:winxp. JDK1.6过程描述:1.⾸先,安装JDK1.62.打开开始-》运⾏->输⼊cmd进⼊dos->cd 路径(原程序的路径)->javac NotepadTest.java(编绎)->java NotepadTest运⾏编写程序:import java.io.File;import .URLClassLoader;import .URL;import ng.InterruptedException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import java.util.Scanner;import java.util.Date;import java.util.Iterator;import java.util.List;import java.text.SimpleDateFormat; import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JCheckBoxMenuItem; import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.ImageIcon;import javax.swing.JScrollPane;import javax.swing.JToolBar;import javax.swing.JMenuItem;import javax.swing.KeyStroke;import javax.swing.JPopupMenu;import javax.swing.JFileChooser;import javax.swing.JOptionPane;import javax.swing.JFileChooser;import javax.swing.JColorChooser; import javax.swing.JDialog;import javax.swing.JTextField;import javax.swing.BorderFactory;import javax.swing.JList;import javax.swing.JComboBox;import javax.swing.UIManager;import javax.swing.JRadioButton;import javax.swing.JToggleButton;import javax.swing.ButtonGroup;import javax.swing.TransferHandler;import javax.swing.border.Border; import javax.swing.border.TitledBorder; import javax.swing.text.Document; import javax.swing.undo.UndoManager; import javax.swing.undo.UndoableEdit; import。
Android_记事本事例_Android_NotePad
![Android_记事本事例_Android_NotePad](https://img.taocdn.com/s3/m/bcbfab81b9d528ea81c779fc.png)
import android.view.Menu;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;
public class NotePad1 extends Activity {
new View.OnClickListener(){
public void onClick(View view){
createDialog();
}
}
);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
super.onCreate(savedInstanceState);
setContentView(yout.note_edit);
Button confirmButton = (Button)findViewById(R.id.confirm);
confirmButton.setOnClickListener(
<Buttonandroid:id="@+id/confirm"
android:text="@string/confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
android实现记事本app
![android实现记事本app](https://img.taocdn.com/s3/m/07fc6332492fb4daa58da0116c175f0e7cd119e9.png)
android实现记事本app⾃⼰写的⼀个简单的记事本app,效果如下:⼀、⾸先是第⼀个界⾯的编写,最上⾯是⼀个TextView,中间是⼀个Linearlayout中嵌套⼀个listview布局,最下⾯是⼀个button。
下⾯附上第⼀个页⾯的简单布局xml⽂件。
<LinearLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@android:color/darker_gray"android:orientation="vertical" ><TextViewandroid:layout_height="wrap_content"android:layout_width="fill_parent"android:text="记事本列表"android:textSize="20sp"android:paddingTop="10dp"android:paddingBottom="5dp"android:background="#039DCF"android:gravity="center"/><LinearLayoutandroid:layout_width="fill_parent"android:id="@+id/listview"android:layout_margin="5dp"android:background="#81966F"android:layout_width="match_parent"android:layout_height="wrap_content" ></ListView></LinearLayout><Buttonandroid:id="@+id/btn_editnote"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/btn_selctor"android:layout_gravity="center"android:layout_marginBottom="10dp"android:text="添加备忘录"android:textSize="20sp" /></LinearLayout>⾄于button的样式btn_selector就是⾃⼰定义的button样式。
Android记事本程序开发
![Android记事本程序开发](https://img.taocdn.com/s3/m/792a297aa300a6c30c229fad.png)
Android记事本程序开发《移动智能终端程序设计》课程结业作品Android记事本程序设计说明书班级:信息管理与信息系统姓名:王成科学号:2013404020106荆楚理工学院计算机工程学院目录一、需求分析 (5)二、可行性分析 (5)三、设计目标 (6)3.1、项目功能模块划分 (6)3.2、UI设计 (6)3.3、图形设计 (6)四、系统设计-功能结构设计 (7)4.1、新建笔记 (7)4.2、修改笔记 (8)4.3、删除笔记 (8)五、数据库设计 (8)5.1、笔记表-notes (8)5.2、多媒体信息表-media (9)六、架构设计 (9)七、代码开发及工作分配 (9)7.1、主页面/笔记列表显示页面的布局代码: (9)7.2、编辑笔记页面的布局代码: (10)7.3、显示多媒体列表的条目布局: (11)7.4、显示笔记列表的条目布局: (12)7.5、主页面/笔记列表显示页面的java代码 (12)7.6、编辑笔记页面的java代码: (15)7.7、显示图片的页面: (22)7.8、显示视频的页面: (23)7.9、操作数据库的类: (24)7.10、manifest文件代码: (25)八、测试 (26)8.1、测试功能和操作方式: (26)8.2、测试结果 (27)参考文献 (28)一、需求分析一个记事本,能够输入标题和内容,创建日期、最新修改日期等信息。
如果没有输入标题则使用内容的第一句话作为标题,创建日期和修改日期均由系统自动生成,无需用户干预。
提供笔记列表,列表中笔记展示位标题、创建日期/修改日期高级的可以给笔记添加照片或视频,这既可以自己拍摄也可以添加手机中已有的视频。
二、可行性分析技术可行,安卓记事本在技术上已经非常成熟,所以在这方面有很多地方可以参考别人的。
经济可行,安卓记事本开发成本低,使用效率高,同事这个作品是作为练习使用,提高自己开发能力。
技术方面主要用到Java,SQLite,listview、Intent等知识点。
Android实现记事本小功能
![Android实现记事本小功能](https://img.taocdn.com/s3/m/997aa966f342336c1eb91a37f111f18583d00c39.png)
Android实现记事本⼩功能本⽂实例为⼤家分享了Android实现记事本功能的具体代码,供⼤家参考,具体内容如下⾸先声明,本⼈是android的⼩⽩,主要是新⼈项⽬写了这个程序,思路可能不是很清晰,可优化的地⽅也有很多,望路过的⼤佬不吝赐教。
该记事本包含创建新条⽬,数据库增删改查,条⽬可编辑,滑动删除与拖拽排序,简单闹钟实现(还有个简陋背景⾳乐开关就不提了太简单),接下来逐⼀介绍⼀下。
build.gradle导⼊apply plugin: 'kotlin-kapt''''implementation 'com.google.android.material:material:1.0.0'implementation 'de.hdodenhof:circleimageview:3.0.1'implementation 'com.android.support.constraint:constraint-layout:1.1.3'implementation 'androidx.room:room-runtime:2.1.0'implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'implementation 'androidx.recyclerview:recyclerview:1.0.0'kapt "androidx.room:room-compiler:2.1.0"没什么多说的。
Room数据库room数据库相⽐于sqlite来说对新⼈确实友好很多,在没有SQL基础的前提下,增删改查等实现都很简单,只需创建⼀个实例,便可在线程中进⾏。
android移动开发基础案例教程第二版记事本案例
![android移动开发基础案例教程第二版记事本案例](https://img.taocdn.com/s3/m/9d1ca321a88271fe910ef12d2af90242a895ab31.png)
android移动开发基础案例教程第二版记事本案例Android移动开发基础案例教程第二版记事本案例是一个基于Android系统的应用程序开发案例,旨在帮助初学者了解Android应用程序的基本结构和开发流程。
以下是该案例的简要概述和关键步骤:案例概述记事本案例是一个简单的文本编辑器应用程序,用户可以在其中创建、编辑和保存文本文件。
该案例涵盖了Android开发中的基本概念,如活动(Activity)、布局(Layout)、意图(Intent)和数据存储等。
关键步骤1. 创建新项目:使用Android Studio创建一个新的Android项目。
2. 设计用户界面:使用XML布局文件设计应用程序的用户界面,包括文本输入框、保存按钮等。
3. 创建活动:创建一个新的活动(Activity),用于处理用户输入和应用程序逻辑。
4. 处理用户输入:在活动中编写代码,处理用户的输入,如文本编辑和保存操作。
5. 数据存储:实现数据存储功能,将用户输入的文本保存到本地文件中。
可以使用Android提供的文件存储API。
6. 测试应用程序:在模拟器或真实设备上测试应用程序,确保其正常运行并满足预期功能。
7. 调试和优化:根据测试结果调试代码,优化性能和用户体验。
注意事项在开发过程中,确保遵循良好的编程实践,如变量命名规范、代码注释等。
考虑用户界面设计的可用性和美观性,以提高用户体验。
学习和掌握Android开发的基本概念和API,以便更好地理解和应用它们。
通过这个案例,你可以逐步掌握Android开发的基础知识,并学会如何开发一个实用的应用程序。
这有助于你进一步探索更复杂的Android应用程序开发项目。
安卓记事本说明
![安卓记事本说明](https://img.taocdn.com/s3/m/9969a3ca8bd63186bcebbcb9.png)
软件流程:首次打开APP需要输入手势密码,正确设置后进入记事本--> 点击“新建记事本”创建记事本,点击“完成”退出编辑页面,进入主页面--> 点击刚刚创建的记事本进入编辑页面,可以重新修改记事本内容--> 如要修改手势密码,在主页面按menu键即可,之前的密码认证成功后方可修改。
所用技术:1、SQLiite本地数据库:记事本内容存在csust.db本地数据库的memo表中,在DBOpenHelper.java文件中查看。
2、用HolderView实现ListView的Adapter:BaseWrapperAdapter.java是对记事本主页的ListView写的适配器,使用HolderView的方式可以大大的减少ListView创建的View的数量,是GOOGLE I/O 2013强烈推荐的一种写法。
3、开源手势解锁:手势解锁是用的国际友人托管在github上的一个开源项目难点:1、TimeUtile.java文件是时间的一个工具类,里面对最后修改记事本的时间进行了优化,比如显示“今天”、“昨天”、“前天”,再之前的就直接显示年月日。
2、手势密码虽然是开源项目,但需要跑起来还是要费一点功夫,并且判断设置成功后的Intent跳转需要用心。
3、Android的数据存储有很多方式,其中最高效但是最麻烦的就是使用SQLite,MemoService.java有所有数据库操作的代码。
分工:王雨威:实现界面Activity周凯:实现SQLite数据库路人甲:实现工具类,手势解锁的跑通及调试。
Memoitem 对应数据库每一条的记录Memoservice 对应的数据库的操作TimeUtil 优化时间的显示DBOpenHelper 对sqlite数据库进行的操作CustomDialog 编辑部分重写的dialogDroplistView 没用到Loginactivity 登陆的界面SetPasswordActivity 重设密码界面EditNewFileActivity 创建一个新的记录DetailActivity 每一条记录的详细信息Mainactivity 是EditNewFileActivity DetailActivity BaseWrapperActivity的基类BaseWrapperActivity 列表的activity (BaseWrapperAdapter)Locus 和util 上面的代码都是开源的代码Layout中的文件values中的文件drawable-hdpi中的文件讲解:1.根据Androidmainfest的配置,先启动loginactivity。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
43 / 66
4. 完成代码
• 关于 onActivityResult() 方法
Activity1 (主界面)
startActivity ForResult()
onActivity Result()
Activity2 (次级界面)
44 / 66
4.2 完成Activity——编写主界面Activity
7 / 66
1. Android平台简介
• 开发环境: Eclipse 主要编写Java程 序,也可编写 C++等其它程序。
8 / 66
1. Android平台简介
• 调试方法 1. 手机通过数据线连接电脑进行调试 2. Android虚拟机(AVD)
9 / 66
1. Android平台简介
• Android虚拟机 (AVD)
{
// 使用intent对象启动另一个activity 注:一般启动
Intent intent = new Intent();
Activity的方 法是
intent.setClass(NotelistActivity.this, startActivity()
ItemNotelistActivity.class);
用来模拟Android 环境,方便开发 者对程序进行模 拟调试和开发
10 / 66
1. 平台简介
• Android虚拟机 (AVD)
11 / 66
二. 新建工程
12 / 66
2. 新建工程
• 打开eclipse,
File -> New -> Project -> Android -> Android Application Project -> Next ->
注: 所有的Activity 都需要在该文 件中进行注册, 以方便程序能 够查找到这个 Activity。
37 / 66
4.2 完成Activity——编写主界面Activity 4.2 编写主界面 Activity
38 / 66
4.2 完成Activity——编写主界面Activity
• 在NotelistActivity中初始化一个监听器
(在NotelistActivity中添加)
private OnClickListener mOnClickListener = new OnClickListener() { public void onClick(View v) { ... // 定义点击事件
} };
39 / 66
4.2 完成Activity——编写主界面Activity
28 / 66
3.2 设置布局——编写次级界面布局
• 编写次级界面布局
保存按钮 (Button)
文本编辑框 (EditText)
删除按钮 (Button)
29 / 66
3.2 设置布局——编写次级界面布局
• 新建一个xml文件:
右键 new->Android xml File
布局文件名: activity_itemnote
Dian团队第二期“四零”免费培训 第一课
Android开发之记事本
移动组 刘汉(电信系11级)
1 / 66
Dian团队第二期“四零”免费培训 第一课
Class 2.第二周
随身播放器
Class 1.第一周
便携笔记本
Class 3.第三周
播放器优化
Class 5.第八周
作业答辩
Class 4.第四周
32 / 66
3.2 设置布局——编写次级界面布局
• 添加文本编辑框(EditText)
(在Linearlayout中添加)
<EditText android:id="@+id/itemnote_content_edit" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="top|left" android:background="@android:color/white" android:hint="笔记内容" />
RSS大作业
2 / 66
Dian团队第二期“四零”免费培训 第一课 • 记事本程序截图
3 / 66
Dian团队第二期“四零”免费培训 第一课 • 课程目标 1. 熟悉Android开发平台 2. 了解Android开发语言 3. 掌握Android开发基础流程 4. 完成一个简单的记事本
4 / 66
30 / 66
3.2 设置布局——编写次级界面布局
• 添加保存按钮
(在Linearlayout中添加)
<Button android:id="@+id/itemnote_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="保存笔记" />
{ public void onItemClick( AdapterView<?> arg0, View arg1, int arg2, long arg3) { ... // 设置监听器中的点击方法 }
};
42 / 66
4.2 完成Activity——编写主界面Activity
• 重写onActivityResult() 方法
(在NotelistActivity中添加)
protected void onActivityResult( int requestCode, int resultCode, Intent data)
{ super.onActivityResult(requestCode, resultCode, data); ... // 这里的代码最后再补上
33 / 66
四. 完成Activity
4.1 新建Activity 4.2 编写主界面Activity 4.3 编写次级界面Activity
34 / 66
4. 完成Activity
• 记事本程序
主界面
次级界面
35 / 66
4.1 完成Activity——新建Activity
• 新建Activity(活动)
mAddBtn. setOnClickListener(mOnClickListener);
}
40 / 66
4.2 完成Activity——编写主界面Activity
• 完成监听器中的点击方法
(在onClick(View v)方法中添加)
if(v.getId() == R.id.notelist_addbtn)
</LinearLayout>
26 / 66
3.1 设置布局——编写主界面布局
• 添加按钮
(在Linearlayout中添加) <Button android:id="@+id/notelist_addbtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="添加笔记" />
25 / 66
3.1 设置布局——编写主界面布局
• 写入根布局:
<LinearLayout xmlns:android="/ apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- ... 其他控件 -->
• 添加点击按钮
(在NotelistActivity中添加) // 声明一个Button对象 private Button mAddBtn; // 自定义init()方法进行初始化 private void init() {
mAddBtn = (Button) findViewById(R.id.notelist_addbtn);
src->包名 右键 New->Class
自定义Activity的父 类必须直接或者间 接的继承Activity类
36 ivity
• 在 AndroidManifest.xml 中注册
(在</application>前添加)
<activity android:name= "org.dian.mynote .ItemNotelistActivity" />
startActivityForResult(intent, 0);
}
41 / 66
4.2 完成代码——编写主界面Activity
• 添加列表的监听器
(在NotelistActivity中添加)
private AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener()
<test ...
/>
<test ...>
... </test>