如何制作自己的app(如何制作自己的网站)-pg电子平台

作文

如何制作自己的app(如何制作自己的网站)插图

基于jetbrains intellij理念,android studio提供:

基于gradle的构建支持android 专属的重构和快速修复提示工具以捕获性能、可用性、版本兼容性等问题支持proguard 和应用签名基于模板的向导来生成常用的 android 应用设计和组件功能强大的布局编辑器,可以让你拖拉 ui 控件并进行效果预览功能介绍

1.优化提示:在主体中打开你的app,点击提示,你会得到这样的建议:为你的app开发一个平板版本。

2.应用翻译服务:允许开发者直接从开发主体获得专业翻译。上传您的需求,选择翻译,它会显示译者和价格,并在一周内发回翻译。

3.推荐跟踪:让开发者找出最有效的广告。

4.收入曲线图:向开发者展示应用收入,并按国家划分。

5.试用版测试和阶段性展示:开发者可以对应用进行测试,然后推出测试用户,测试结果不会对外公布。当一个版本的测试完成后,开发人员可以将它推广给特定比例的用户。

首次公布开发工具android studio,也是为了方便开发者基于android进行开发。

一款小app开发实用“笔记本”

第一,需求分析1.业务需求分析:

分析潜在客户需要什么产品或服务。

2.架构分析:

分析产品或服务的功能和实现,并绘制功能结构图。记事本的情况如下。

3.数据库类设计分析:

数据库设计是本项目开发的关键环节。在记事本的情况下也很重要。我们添加、删除和检查数据库表(注意)。记事本的数据表如下

4.行业需求分析:

友好世界在移动平台开发中往往很重要,也是用户软件的前提。记事本的案例分为三个边界,即记事本边界、添加边界和修改边界。记事本边界包含添加按钮和记录列表。点击后会跳转到增加边界,标题是增加记录,编辑过的内容也可以在这个边界中清除保存。

当您单击记事本字段中的项目时,您将跳转到修改的记录字段,其中标题为修改的记录。在该字段中,您可以查看和修改已保存的记录内容,也可以清除和保存已编辑的内容。

二。本案例的步骤1.创建项目后,将活动名称设置为notepadactivity,

布局是activity_notepad,添加了所需材料。png(添加按钮),se_note.png(保存按钮),delete.png(删除按钮)和back.png(返回按钮)到?drawable?文件夹,如下

添加按钮的右侧有一个后退按钮。是的。

2.编写activity_notepad.xml布局,

将textview控件放在显式标题中,将listview控件放在显式记录列表中,将imageview控件放在显式添加按钮中的图示。

3.修改列表。

创建项目后,所有边界都有一个默认的标题栏,这不是很漂亮,所以它需要在清单(androidmanifest.xml)的标记中

android:theme="@style/theme.appcompat.noactionbar"4.在记事本世界中设置?item布局。

在res/layout?文件夹中,创建一个布局notepad_item_layout.xml,并在其中放置两个textview控件,显示记录的部分内容和保存记录的时间。

?xml version="1.0" encoding="utf-8"?>5.封装记录信息实体类

由于记事本中的每条记录都会有记录内容和记录保存时间的属性,因此有必要创建一个notepadbean?来存储这些属性。选择您创建的项的包,右键选择new >: package,创建一个bean包,在这个包中创建一个?notepadbean类,在这个类中定义了记录信息的所有属性。

package com.example.notepad.bean;public class notepadbean { private string id; private string notepadcontent; private string notepadtime; public string getid(){returnid;} public void setid(string id){ this.id=id;} public string getnotepadcontent(){return notepadcontent;} public void setnotepadcontent(string notepadcontent){ this.notepadcontent=notepadcontent;} public string getnotepadtime(){return notepadtime;} public void setnotepadtime(string notepadtime){ this.notepadtime=notepadtime;}}

注意包名

6.编写记事本列表适配器。

因为记事本中的记录列表是用来显示listview控件的,所以需要创建一个数据适配器notepadadapter来适配listview控件的数据。选择您创建的项的包如下,右键选择new >: package,创建一个适配器包,在适配器包中创建一个notepadadapter类继承?baseadapter类,重写getcount()、getitem()、getitemid()、getview()方法。这些方法获取项目总数、对应的项目对象、项目对象的id和对应的项目视图,在notepadadapter类中创建viewholder类,并在该类中初始化项目世界中的控件。具体代码如下

package com.example.notepad.adapter;import android.content.context;import android.view.layoutinflater;import android.view.view;import android.view.viewgroup;import android.widget.baseadapter;import android.widget.textview;import com.example.notepad.r;import com.example.notepad.bean.notepadbean;import ja.util.list;public class notepadadapter extends baseadapter { private layoutinflater layoutinflater; private list list; public notepadadapter(context context, listlist){ this.layoutinflater=layoutinflater.from(context); this.list=list;} @override public int getcount(){return list==null?0:list.size();} @override public object getitem(int position){return list.get(position);} @override public long getitemid(int position){return position;} @override public view getview(int position,view convertview, viewgroup parent){ viewholder viewholder; if(convertview==null){ convertview=layoutinflater.inflate(r.layout.notepad_item_layout,null); viewholder=new viewholder(convertview); convertview.settag(viewholder);}else{ viewholder=(viewholder)convertview.gettag();} notepadbean noteinfo=(notepadbean)getitem(position); viewholder.tvnoteoadcontent.settext(noteinfo.getnotepadcontent()); viewholder.tvnotepadtime.settext(noteinfo.getnotepadtime());return convertview;} class viewholder{ textview tvnoteoadcontent; textview tvnotepadtime; public viewholder(view view){ tvnoteoadcontent=(textview)view.findviewbyid(r.id.item_content); tvnotepadtime=(textview)view.findviewbyid(r.id.item_time);}}}

注意包名

创建数据库

在记事本的情况下,添加、删除和搜索记录的数据都是通过操作数据库来完成的。因此,有必要创建数据库类sqlitehelper和数据库类dbutils。步骤如下:选择创建的项的包,右键选择new >: package,创建一个utils包,在utils包中创建一个dbutils类。在这个类中,可以定义数据库名、表名、数据库版本、数据库表中的列名,并获取当前期间等信息。

package com.example.notepad.utils;import ja.text.simpledateformat;import ja.util.date;public class dbutils { public static final string database_name="notepad"; public static final string datase_table="note"; public static final int datebase_verion=1; public static final string notepad_id="id"; public static final string notepad_content="content"; public static final string notepad_time="notetime"; public static final string gettime(){ simpledateformat simpledateformat=new simpledateformat("yyyy年mm?dd?hh:mm:ss"); date date=new date(system.currenttimemillis());return simpledateformat.format(date);}}

注意包名。选择您创建的项目的包,右键单击并选择new >: package,创建一个数据库包,并在数据库包中创建一个sqlitehelper类来继承?sqliteopenhelper类

package com.example.notepad.database;import android.content.contentvalues;import android.content.context;import android.database.cursor;import android.database.sqlite.sqlitedatabase;import android.database.sqlite.sqliteopenhelper;import com.example.notepad.bean.notepadbean;import com.example.notepad.utils.dbutils;import ja.util.arraylist;import ja.util.list;public class sqlitehelper extends sqliteopenhelper { private sqlitedatabase sqlitedatabase; public sqlitehelper(context context){ super(context,dbutils.database_name,null,dbutils.datebase_verion); sqlitedatabase=this.getwritabledatabase();} @override public void oncreate(sqlitedatabase db){ db.execsql("create table " dbutils.datase_table "( " dbutils.notepad_id " integer primary key autoincrement ," dbutils.notepad_content " text , " dbutils.notepad_time " text ) ");} @override public void onupgrade(sqlitedatabase db,int oldversion,int newversion){} public boolean insertdata(string usercontent,string usertime){ contentvalues contentvalues=new contentvalues(); contentvalues.put(dbutils.notepad_content,usercontent); contentvalues.put(dbutils.notepad_time,usertime);return sqlitedatabase.insert(dbutils.datase_table,null,contentvalues)>0;} public boolean deteledata(string id){ string sql=dbutils.notepad_id "=?"; string[] contentvaluesarray=new string[]{string.valueof(id)};return sqlitedatabase.delete(dbutils.datase_table,sql,contentvaluesarray)>0;} public boolean updatedata(string id,string content,string useryear){ contentvalues contentvalues=new contentvalues(); contentvalues.put(dbutils.notepad_content,content); contentvalues.put(dbutils.notepad_time,useryear); string sql=dbutils.notepad_id "=?"; string[] strings=new string[]{id};return sqlitedatabase.update(dbutils.datase_table,contentvalues,sql,strings)>0;} public listquery(){ list list=new arraylist(); cursor cursor=sqlitedatabase.query(dbutils.datase_table,null,null,null,null,null,dbutils.notepad_id " desc"); if(cursor!=null){while(cursor.movetonext()){ notepadbean noteinfo=new notepadbean(); string id=string.valueof(cursor.getint(cursor.getcolumnindex(dbutils.notepad_id))); string content=cursor.getstring(cursor.getcolumnindex(dbutils.notepad_content)); string time=cursor.getstring(cursor.getcolumnindex(dbutils.notepad_time)); noteinfo.setid(id); noteinfo.setnotepadcontent(content); noteinfo.setnotepadtime(time); list.add(noteinfo);} cursor.close();}return list;}}

注意包名

7.实现记事本的显式功能。

在notepadactivity中,通过创建showquerydata()方法来查询存储在数据库中的记录信息,并将信息显示在记录列表中。同时在notepadactivity中实现了添加按钮的click事件。

package com.example.notepad;import android.content.dialoginterface;import android.content.intent;import android.support.v7.app.alertdialog;import android.support.v7.app.appcompatactivity;import android.os.bundle;import android.view.view;import android.widget.adapterview;import android.widget.imageview;import android.widget.listview;import android.widget.toast;import com.example.notepad.adapter.notepadadapter;import com.example.notepad.bean.notepadbean;import com.example.notepad.database.sqlitehelper;import ja.util.list;public class notepadactivity extends appcompatactivity { listview listview; list list; sqlitehelper msqlitehelper; notepadadapter adapter; @override protected void oncreate(bundle sedinstancestate){ super.oncreate(sedinstancestate); setcontentview(r.layout.activity_notepad); listview=(listview)findviewbyid(r.id.listview); imageview add=(imageview)findviewbyid(r.id.add); add.setonclicklistener(new view.onclicklistener(){ @override public void onclick(view v){ intent intent=new intent(notepadactivity.this,recordactivity.class); startactivityforresult(intent,1);}}); initdata();} protected void initdata(){ msqlitehelper=new sqlitehelper(this); showquerydata(); listview.setonitemclicklistener(new adapterview.onitemclicklistener(){ @override public void onitemclick(adapterview parent, view view, int position, long id){ notepadbean notepadbean=list.get(position); intent intent=new intent(notepadactivity.this,recordactivity.class); intent.putextra("id",notepadbean.getid()); intent.putextra("time",notepadbean.getnotepadtime()); intent.putextra("content",notepadbean.getnotepadcontent()); notepadactivity.this.startactivityforresult(intent,1);}}); listview.setonitemlongclicklistener(new adapterview.onitemlongclicklistener(){ @override public boolean onitemlongclick(adapterview parent, view view, final int position, long id){ alertdialog dialog; alertdialog.builder builder=new alertdialog.builder(notepadactivity.this).setmessage("是否删除此记录").setpositivebutton("确定", new dialoginter alertdialog.builder builder=new alertdialog.builder(notepadactivity.this).setmessage("是否删除此记录").setpositivebutton("确定", new dialoginterface.onclicklistener(){ @override public void onclick(dialoginterface dialog, int which){ notepadbean notepadbean=list.get(position); if(msqlitehelper.deteledata(notepadbean.getid())){ list.remove(position); adapter.notifydatasetchanged(); toast.maketext(notepadactivity.this,"删除成功",toast.length_short).show();}}}).setnegativebutton("取消", new dialoginterface.onclicklistener(){ @override public void onclick(dialoginterface dialog, int which){ dialog.diiss();}}); dialog=builder.create(); dialog.show();returntrue;}});} private void showquerydata(){ if(list!=null){ list.clear();} list=msqlitehelper.query(); adapter=new notepadadapter(this,list); listview.setadapter(adapter);} @override protected void onactivityresult(int requestcode,int resultcode,intent data){ super.onactivityresult(requestcode,resultcode,data); if(requestcode==1&&resultcode==2){ showquerydata();;}}}

注意包名

8.设置添加记录和修改记录的布局。

在记事本中点击增加按钮会跳转到增加记录,在记事本列表中点击该项会跳转到修改记录。因为这两个边界的控件和功能基本相同,所以可以让相同的活动和相同的布局显示这两个边界。步骤如下:选择您创建的项的包,创建一个名为recordactivity的活动,并将布局命名为activity_record。在activity_record.xml布局中,两个textview控件放置在显示标题和录制时间中,一个edittext控件放置在显示框中,三个imageview控件放置在显示后退按钮图标、删除图标和保存按钮图标中。

1.实现添加记录圈的功能。

因为需要click事件来添加记录边界的clear和se按钮,所以recordactivity实现为view。onclicklistener,并重写了onclick()方法,其中实现了将写入的记录添加到数据库中的功能。

package com.example.notepad;import android.content.intent;import android.support.v7.app.appcompatactivity;import android.os.bundle;import android.view.view;import android.widget.edittext;import android.widget.imageview;import android.widget.imageview;import android.widget.textview;import android.widget.toast;import com.example.notepad.database.sqlitehelper;import com.example.notepad.utils.dbutils;public class recordactivity extends appcompatactivity implements view.onclicklistener { imageview note_back; textview note_time; edittext content; imageview deldete; imageview note_se; sqlitehelper msqlitehelper; textview notename; string id; @override protected void oncreate(bundle sedinstancestate){ super.oncreate(sedinstancestate); setcontentview(r.layout.activity_record); note_back =(imageview) findviewbyid(r.id.note_back); note_time =(textview) findviewbyid(r.id.tv_time); content =(edittext) findviewbyid(r.id.note_content); deldete =(imageview) findviewbyid(r.id.delete); note_se =(imageview) findviewbyid(r.id.note_se); notename =(textview) findviewbyid(r.id.note_name); note_back.setonclicklistener(this); deldete.setonclicklistener(this); note_se.setonclicklistener(this); initdata();} protected void initdata(){ msqlitehelper = new sqlitehelper(this); notename.settext("添加记录"); intent intent = getintent();if(intent != null){id= intent.getstringextra("id");if(id != null){ notename.settext("修改记录"); content.settext(intent.getstringextra("content")); note_time.settext(intent.getstringextra("time")); note_time.setvisibility(view.visible);}}} @override public void onclick(view v){ switch (v.getid()){case r.id.note_back: finish();break;case r.id.delete: content.settext("");break;case r.id.note_se: string notecontent = content.gettext().tostring().trim();if(id != null){if(notecontent.length()> 0){if(msqlitehelper.updatedata(id, notecontent, dbutils.gettime())){ showtoast("修改成功"); setresult(2); finish();}else{}else{ showtoast("修改失败");}}else{ showtoast("修改内容不能为空");}}else{ if(notecontent.length()>0){ if(msqlitehelper.insertdata(notecontent,dbutils.gettime())){ showtoast("保存成功"); setresult(2); finish();}else{ showtoast("保存失败");}}else { showtoast("修改内容不能为空");}}break;}} public void showtoast(string message){ toast.maketext(recordactivity.this,message,toast.length_short).show();}}

注意包名

2.实现修改记录世界的功能。

记录修改字段主要包括查看记录和修改记录的功能。实现了查看记录的功能。记事本字段列表中每个项目最多只显示2条记录信息。如果想查看更多的记录内容,需要点击该项进入修改记录字段进行查看。所以当你点击该项时,需要将该项对应的记录信息转移到修改后的记录字段中进行显示,这就是notepadactivity的initdata()方法。具体代码已在步骤(7)中编写。

在recordactivity的initdata()方法中,需要接收记事本世界传递的记录数据,并将数据显示给世界。在当前步骤中已经编写了具体的代码来实现修改记录的功能。在recordactivity的onclick()方法中,找到了保存按钮的click事件。在这种情况下,根据传递的id是否为空,判断是否增加或修改记录世界的保存功能。如果id不为空,将修改记录世界的保存函数,具体代码已在当前步骤中编写。

9.删除记事本中的记录。

当需要删除记事本列表中的一条记录时,需要按住列表中的该项,会弹出一个对话框询问是否删除该项对应的记录。所以删除记录的逻辑代码写在notepadactivity的initdata()方法中,具体代码已经在第(7)步写好了。

10记事本箱已完成。摘要

用android studio做一个简单的app记事本。这个新手都可以练。

高级安卓技术学习,可以私信发送“核心笔记”或“笔记”获取:高级安卓核心技术资讯!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文链接:https://www.andon8.com/184437.html

网站地图