Android毕业设计备忘录APP

目录
  • 1.系统需求分析
    • 1.2 系统需求
      • 功能&说明
    • 1.3 该项目涉及到的技术点
  • 2.数据存储设计
    • 2.1 SharedPrefenrences/SQLite存储介绍
      • SharedPrefenrences :
      • SQLite存储
    • 2.2数据表结构
  • 3.具体编码及截图
    • 3.1 主界面
    • 3.2 各功能模块
  • 4 总结

源码放到GitHub上了,大家可以看一下 https://github.com/become-better1/hh

1.系统需求分析

1.1 系统功能及框图
该项目实现了备忘录的创建,修改,删除,查询,对备忘录数目的统计和软件的说明。

1.2 系统需求

功能&说明

备忘录的创建 主键自动生成,将控件中的数据对Word字段进行赋值
备忘录的修改 将控件中的数据对Word字段进行赋值,查询条件是与原先的Word字段相等
备忘录的查询 对Word字段进行查询,查询条件是与控件中的数据相等
备忘录的删除 按照Word字段进行删除,查询条件是与控件中的数据相等
备忘录数目的统计 通过SharedPrefenrences来存储和读取数据
软件的说明 进一步的描述

1.3 该项目涉及到的技术点

界面控件:TextView,EditText,Button,ImageButton,ListView,View
布局:线性布局
事件:监听事件
数据存储:SharedPrefenrences,SQLite存储
Activity和Intent

2.数据存储设计

2.1 SharedPrefenrences/SQLite存储介绍

SharedPrefenrences :

SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。
SharedPreferences提供了java常规的Long、Int、String等类型数据的保存接口。 [SharedPreferences类似过去Windows系统上的ini配置文件,但是它分为多种权限,可以全局共享访问。
提示最终是以xml方式来保存,整体效率来看不是特别的高,对于常规的轻量级而言比SQLite要好不少,如果真的存储量不大可以考虑自己定义文件格式。xml处理时Dalvik会通过自带底层的本地XML Parser解析,比如XMLpull方式,这样对于内存资源占用比较好。
文件存储
文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中,因而它比较适合用于存储一些简单的文本数据或者二进制数据。如果你想使用文件存储的方式来保存一些较为复杂的文本数据,就需要定义一套自己的格式规范以方便将数据从文件中重新解析出来。
Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。这个方法有两个参数,第一个参数是文件名,在文件创建的时候使用的就是这个名称,(文件的位置是默认 存储到/data/data/packagename/files/目录下的)第二个参数就是文件的操作模式,主要有两种模式可选:MODE_PRIVATE和 MODE_APPEND,其中MODE_PRIVATE是默认的操作模式,表示当指定文件已存在,所写入的内容将会覆盖源文件中的内容,而MODE_APPEND则表示如果该文件已存在,就往文件里追加内容,不存在就创建新文件

SQLite存储

①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!
②但是在很多情况下, 文件并不一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等! 比如银行的存钱与取钱!使用前两者就会显得很无力或者繁琐,数据库的出现可以解决这种问题, 而Android又给我们提供了这样一个轻量级的SQLite,为何不用?
③SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象) 虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;因为SQLite有个最大的特点:你可以各种数据类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,比如你 可以在Integer类型的字段中存放字符串,当然除了声明为主键INTEGER PRIMARY KEY的字段只能够存储64位整数! 另外, SQLite 在解析CREATE TABLE 语句时, 会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息如下面语句会忽略 name字段的类型信息:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

2.2数据表结构

给出使用的数据库的逻辑结构,需要说明各字段属性及含义

Id:作为主键,自带生成
Word:进行存储备忘录的信息
SharedPrefenrences代码

```java
SharedPreferences sharedP=getSharedPreferences("SaveTable",MODE_PRIVATE);
SharedPreferences.Editor editor=sharedP.edit();
int num=sharedP.getInt("number", 0);
num++;
editor.putInt("number", num);
editor.commit();
数据库封装代码:

```java
package com.example.coursedesign;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBOpenHelper extends SQLiteOpenHelper {
    final String CREATE_TABLE_SQL="create table myTable(_id integer primary key autoincrement,word text)";
    public static final String name = "myDb";
    public static final String table_name = "myTable";
    public DBOpenHelper( Context context, String name,  SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_SQL);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.i("生活小助手","--版本更新"+oldVersion+"-->"+newVersion);
    }
    public List<String> readAll () {
        List<String> allCommodities = new ArrayList<String>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery("select * from myTable order by _id",null);
        if(cursor.moveToFirst()) {
            do {
                String title = cursor.getString(cursor.getColumnIndex("word"));
                allCommodities.add(title);
            }while (cursor.moveToNext());
        }
        cursor.close();
        return allCommodities;
    }
    public boolean addMyCollection(String s) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("word",s);
        db.insert(table_name,null,values);
        values.clear();
        return true;
    }
    public void delete(String word) {
        SQLiteDatabase db = this.getWritableDatabase();
        if(db.isOpen()) {
         db.delete(table_name,"word=?",new String[]{word+""});
            db.close();
        }
    }

    public boolean update (String word,String wordP) {
        SQLiteDatabase db = this.getWritableDatabase();
        String sql = "update  myTable set word=? where word=?";
        String[] obj = new String[]{word,wordP};
        db.execSQL(sql,obj);
        return true;
    }
}

3.具体编码及截图

3.1 主界面

通过listView来显示所有的备忘录,界面含有主页,刷新,添加,个人中心的功能。

界面代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/blue"
    tools:context="com.example.coursedesign.MainActivity" >

    <ListView
        android:id="@+id/main_list"
        android:layout_width="match_parent"
        android:layout_height="370dp"
        android:layout_marginTop="4dp"
        android:layout_weight="1.19" />

    <View
        android:id="@+id/view1"
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:layout_marginTop="50dp"
        android:background="@drawable/green" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageButton
            android:id="@+id/ib_home_page"
            android:layout_width="58dp"
            android:layout_height="55dp"
            android:src="@drawable/home" />

        <View
            android:id="@+id/view2"
            android:layout_width="2dp"
            android:layout_height="55dp"
            android:background="@drawable/green" />

        <ImageButton
            android:id="@+id/ib_add_product"
            android:layout_width="58dp"
            android:layout_height="55dp"
            android:src="@drawable/add" />

        <View
            android:id="@+id/view3"
            android:layout_width="2dp"
            android:layout_height="55dp"
            android:background="@drawable/green" />

        <ImageButton
            android:id="@+id/refresh"
            android:layout_width="58dp"
            android:layout_height="55dp"
            android:src="@drawable/refresh" />

        <View
            android:id="@+id/view4"
            android:layout_width="2dp"
            android:layout_height="55dp"
            android:background="@drawable/green" />

        <ImageButton
            android:id="@+id/ib_personal_center"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:layout_weight="0.84"
            android:src="@drawable/person" />
    </LinearLayout>

   </LinearLayout>

后台代码:

package com.example.coursedesign;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
   ImageButton buttonRefresh;
   ImageButton  buttonAdd;
   ImageButton buttonHome;
   ImageButton buttonPerson;
   DBOpenHelper dbHelper;
   List<String> listString=new ArrayList<String>();
   ListView listview;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		dbHelper = new  DBOpenHelper(getApplicationContext(),DBOpenHelper.name , null, 1);
		buttonRefresh=(ImageButton) findViewById(R.id.refresh);//刷新
		listview=(ListView) findViewById( R.id.main_list);
		 buttonRefresh.setOnClickListener(new View.OnClickListener() {
	            @Override
	            public void onClick(View v) {
	                listString = dbHelper.readAllCommodities();
	                ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,listString);
	                listview.setAdapter(adapter);
	            }
	        });
		 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {///List
	            @Override
	            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	                String s = (String) listview.getAdapter().getItem(position);
	                Bundle bundle1 = new Bundle();
	                bundle1.putInt("position",position);
	                bundle1.putString("title",s);
	                Intent intent = new Intent(MainActivity.this, ListViewActivity.class);
	                intent.putExtras(bundle1);
	                startActivity(intent);
	            }
	        });
		 buttonAdd=(ImageButton) findViewById(R.id.ib_add_product);//Add
		 buttonAdd.setOnClickListener(new View.OnClickListener() {
	            @Override
	            public void onClick(View v) {
	            	  Intent intent = new Intent(MainActivity.this, AddActivity.class);
	                  startActivity(intent);
	            }
	        });
		 buttonHome=(ImageButton) findViewById(R.id.ib_home_page);//home
		  buttonHome.setOnClickListener(new View.OnClickListener() {
		            @Override
		            public void onClick(View v) {
		            	 Toast.makeText(getApplicationContext(), "已在主页", Toast.LENGTH_SHORT).show();
		            }
		        });
		  buttonPerson=(ImageButton) findViewById(R.id.ib_personal_center);///person
		  buttonPerson.setOnClickListener(new View.OnClickListener() {
	            @Override
	            public void onClick(View v) {
	            	 Intent intent = new Intent(MainActivity.this, PersonActivity.class);
	                  startActivity(intent);
	            	 Toast.makeText(getApplicationContext(), "进入个人中心", Toast.LENGTH_SHORT).show();
	            }
	        });

	}

}

3.2 各功能模块

添加备忘录:
界面
通过SQLite数据实现对备忘录的添加。

界面代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:orientation="vertical"
     android:background="@drawable/blue"
    tools:context="com.example.coursedesign.AddActivity" >
   <View
        android:layout_width="match_parent"
        android:layout_height="50dp" />
    <EditText
        android:id="@+id/add_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入添加的信息" />
     <View
        android:layout_width="match_parent"
        android:layout_height="120dp" />
    <Button
        android:id="@+id/add_button"
         android:layout_gravity="center_horizontal"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提交"
        />

</LinearLayout>

后台代码:

package com.example.coursedesign;

import android.app.Activity;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AddActivity extends Activity {

	Button button;
	EditText editText;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_add);
		button=(Button) findViewById(R.id.add_button);
		editText=(EditText) findViewById(R.id.add_text);
		 button.setOnClickListener(new View.OnClickListener() {
	            @Override
	            public void onClick(View v) {
	               String s=editText.getText().toString();
	               DBOpenHelper dbHelper = new DBOpenHelper(getApplicationContext(), DBOpenHelper.name, null, 1);
	               if(s!=null){
	            	   if(dbHelper.addMyCollection(s)){
	            		   Toast.makeText(getApplicationContext(), "添加成功", Toast.LENGTH_SHORT).show();
	            		   SharedPreferences sharedP=getSharedPreferences("SaveTable",MODE_PRIVATE);
	            		   SharedPreferences.Editor editor=sharedP.edit();
	            		   int num=sharedP.getInt("number", 0);
	            		   num++;
	            		   editor.putInt("number", num);
	            		   editor.commit();
	            		   finish();
	            	   }
	            	   else{
	            		   Toast.makeText(getApplicationContext(), "添加失败", Toast.LENGTH_SHORT).show();
	            	   }
	               }
	            }
	        });
	}

}

删除和修改备忘录:
通过SQLite数据实现对备忘录的修改和删除。

界面:

界面代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/blue"
    tools:context="com.example.coursedesign.ListViewActivity" >

    <EditText
        android:id="@+id/listView_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="你好"
         />
    <View
        android:layout_width="match_parent"
        android:layout_height="120dp" />
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     android:layout_gravity="center_horizontal">
          <View
        android:layout_width="20dp"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/listView_updata"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改"
        />
     <View
        android:layout_width="90dp"
        android:layout_height="wrap_content" />
        <Button
        android:id="@+id/listView_delete"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
        />
    </LinearLayout>

</LinearLayout>

后台代码:

package com.example.coursedesign;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class ListViewActivity extends Activity {
    EditText text;
    Button button_up;
    Button button_delete;
    int position;
    String str;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_view);
		text=(EditText) findViewById(R.id.listView_text);
		button_delete=(Button) findViewById(R.id.listView_delete);
		button_up=(Button) findViewById(R.id.listView_updata);
		Bundle b = getIntent().getExtras();
        if( b != null) {
        	str=b.getString("title");
        	//Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
        	  text.setText(str.toCharArray(), 0, str.length());
            position = b.getInt("position");
        }
        button_delete.setOnClickListener(new View.OnClickListener() {//delete
            @Override
            public void onClick(View v) {
               DBOpenHelper dbHelper = new DBOpenHelper(getApplicationContext(), DBOpenHelper.name, null, 1);
               dbHelper.deleteMyCollection(str);
               Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_SHORT).show();
               finish();
            }
        });
        button_up.setOnClickListener(new View.OnClickListener() {//delete
            @Override
            public void onClick(View v) {
            	String wordNew="";
             wordNew=text.getText().toString();
               DBOpenHelper dbHelper = new DBOpenHelper(getApplicationContext(), DBOpenHelper.name, null, 1);
               if(dbHelper.updateUser(wordNew, str)){
               Toast.makeText(getApplicationContext(), "更新成功", Toast.LENGTH_SHORT).show();
               finish();
               }
            }
        });
	}

}

进入页面:
通过使用Intent进行Activity的启动。
界面:

界面代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
        android:orientation="vertical"
    android:background="@drawable/note2"
    tools:context="com.example.coursedesign.FirstActivity" >
   <View   android:layout_width="150dp"
       android:layout_height="79dp"/>
   <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="欢迎来到生活小助手"
        android:layout_gravity="center_horizontal"
       android:textColor="#68EE68"
       android:textSize="24dp"
       android:textStyle="bold"/>
     <View   android:layout_width="150dp"
       android:layout_height="79dp"/>
   <Button
       android:id="@+id/Loading"
          android:layout_width="70dp"
       android:layout_height="40dp"
       android:background="@drawable/green1"
       android:text="进入"
        android:layout_gravity="center_horizontal"
       android:textColor="#F24FFF"
       android:textSize="30dp"
       android:textStyle="bold"
       tools:ignore="MissingConstraints" />

</LinearLayout>

后台代码:

package com.example.coursedesign;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;

public class FirstActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_first);
		Button button=(Button) findViewById(R.id.Loading);
		 button.setOnClickListener(new View.OnClickListener() {
	            @Override
	            public void onClick(View v) {
	            	  Intent intent = new Intent(FirstActivity.this, MainActivity.class);
	                  startActivity(intent);
	            }
	        });
	}

}

个人中心
备忘录数量的统计以及软件的说明
界面:

界面代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/blue"
    tools:context="com.example.coursedesign.PersonActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:background="@drawable/green1"
        android:gravity="center_horizontal"
        android:text="个人中心"
        android:textSize="20sp"
        android:textStyle="italic" />
        <View
            android:layout_width="2dp"
            android:layout_height="0dp"  />
    <TextView
        android:layout_width="match_parent"
         android:layout_marginTop="12dp"
        android:layout_height="25dp"
        android:background="@drawable/yellow"
        android:gravity="center_horizontal"
        android:text="您的记录总共为"
        android:textSize="20sp"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/person_text"
        android:layout_width="match_parent"
        android:layout_height="89dp"
        android:background="@drawable/yellow"
        android:gravity="center_horizontal"
        android:text="50"
        android:textSize="85sp"
        android:textStyle="italic" />

    <Button
        android:id="@+id/person_button"
        android:layout_width="140dp"
        android:layout_height="38dp"
          android:layout_marginTop="16dp"
        android:layout_gravity="center_horizontal"
         android:background="@drawable/white"
        android:text="软件介绍" />
    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/green" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageButton
            android:id="@+id/person_home_page"
            android:layout_width="58dp"
            android:layout_height="55dp"
            android:src="@drawable/home" />

        <View
            android:layout_width="2dp"
            android:layout_height="55dp"
            android:background="@drawable/green" />

        <ImageButton
            android:id="@+id/person_add_product"
            android:layout_width="58dp"
            android:layout_height="55dp"
            android:src="@drawable/add" />

        <View
            android:layout_width="2dp"
            android:layout_height="55dp"
            android:background="@drawable/green" />

        <ImageButton
            android:id="@+id/person_refresh"
            android:layout_width="58dp"
            android:layout_height="55dp"
            android:src="@drawable/refresh" />

        <View
            android:layout_width="2dp"
            android:layout_height="55dp"
            android:background="@drawable/green" />

        <ImageButton
            android:id="@+id/person_personal_center"
            android:layout_width="50dp"
            android:layout_height="55dp"
            android:layout_weight="0.84"
            android:src="@drawable/person" />
    </LinearLayout>

</LinearLayout>

后台代码:

package com.example.coursedesign;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class PersonActivity extends Activity {

	TextView text;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_person);
		 SharedPreferences sharedP=getSharedPreferences("SaveTable",MODE_PRIVATE);
		   int num=sharedP.getInt("number", 0);
		   Integer num2=(Integer)num;
		   text=(TextView) findViewById(R.id.person_text);
		   text.setText(num2.toString());
		   Button button=(Button) findViewById(R.id.person_button);
		   button.setOnClickListener(new View.OnClickListener() {
	            @Override
	            public void onClick(View v) {
	            	Intent intent = new Intent(PersonActivity.this, AppActivity.class);
	                  startActivity(intent);
	            }
	        });
	}

}

软件说明:
对软件的进一步说明。
界面:

界面代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/blue"
    tools:context="com.example.coursedesign.AppActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开发目的:"
        android:textSize="20sp"
        android:layout_marginTop="5dp"
        android:layout_marginStart="5dp"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="它是帮助你忘记的事情,在每个人忙碌的生活当中,人的记忆是有限的,备忘录就是让你把多个事情都能记起的东西。"
        android:textSize="15sp"
        android:layout_marginStart="5dp"
        android:layout_marginEnd="5dp"
        android:layout_marginTop="5dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开发人员:"
        android:textSize="20sp"
        android:layout_marginTop="5dp"
        android:layout_marginStart="5dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="何昊"
        android:textSize="15sp"
        android:layout_marginTop="5dp"
        android:layout_marginStart="5dp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="系统版本:"
        android:textSize="20sp"
        android:layout_marginTop="5dp"
        android:layout_marginStart="5dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android app v1.0.0"
        android:textSize="15sp"
        android:layout_marginTop="5dp"
        android:layout_marginStart="5dp"/>
    <Button
        android:id="@+id/person_button"
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:text="返回"
        android:textSize="20sp"
         android:layout_marginTop="5dp"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

后台代码:

package com.example.coursedesign;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class AppActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_app);
		Button button = (Button) findViewById(R.id.person_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
	}
}

4 总结

谈一下发现的问题与收获:

  1. 开始时使用相对布局进行设计,以为可以通过简单的拖拽就可以实现布局的设计,后面发现在控件变多的时候,变得很麻烦,并且由于界面的选择,eclipse这边的界面与模拟器的界面并不相同。后来使用线性布局进行设计。
  2. 之前上课学过openOrCreateDatabase方法与SQLitreOpenHelper类,存在有一些不明白的问题,通过这次课设,掌握了这些知识。
  3. 对时间规划不足,使得项目结束时间有点晚。

到此这篇关于Android毕业设计备忘录APP的文章就介绍到这了,更多相关Android备忘录内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android BindService使用案例讲解

    最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现. BindService和Started Service都是Service,有什么地方不一样呢: 1. Started Service中使用StartService()方法来进行方法的调用,调用者和服务之间没有联系,即使调用者退出了,服务依然在进行[onCreate()-  >onStartCommand()->startService()->onDes

  • Android自定义view之利用drawArc方法实现动态效果(思路详解)

    目录 前言 一.准备 1.测量 2.初始化画笔 3.自定义属性 二.关键方法介绍 drawArc 三.实现 1.思路 2.效果图 前言 前几天看了一位字节Android工程师的一篇博客,他实现的是歌词上下滚动的效果,实现的关键就是定义一个偏移量,然后根据情况去修改这个值,最后触发View的重绘来达到效果.于是今天根据这个思路来写一篇简单的文章.欢迎留言 一.准备 在这之前呢,还是得简单描述一下自定义view中的一些准备工作 1.测量 @Override protected void onSize

  • Android多返回栈技术

    目录 1.系统返回按钮的乐趣 2.Fragment 中的多返回栈 3.排除 Fragment 在技术上的障碍 4.Fragment 中值得期待的地方 4.使用 Navigation 将多返回栈适配到任意屏幕类型 5.在 Navigation 中启用多返回栈 5.保存状态,锁定用户 1.系统返回按钮的乐趣 无论您在使用 Android 全新的 手势导航 还是传统的导航栏,用户的 "返回" 操作是 Android 用户体验中关键的一环,把握好返回功能的设计可以使应用更加贴近整个生态系统.

  • 详解Android壁纸服务的启动过程

    壁纸基础 android中的壁纸分为动态壁纸和静态壁纸两种,两种类型的壁纸都以Service的类型运行在系统后台. 静态壁纸:仅以图片的形式进行展示对于静态壁纸,可以使用WallpaperManager中的getDrawable()等接口获取到当前的bitmap图像. 动态壁纸:显示的内容为动态的内容,同时可以对用户的操作做出响应对于动态壁纸的实时图像,是没办法通过android中原生的接口获取到,需要获取到动态壁纸的图像得自己修改源码. 壁纸实现时涉及的几个主要的类: WallpaperSer

  • Android自定义view之3D正方体效果实例

    目录 前言 一.小提 二.将传感器改成事件分发机制 三.使用 四.源码 总结 前言 在之前写了一篇关于3D效果的文章,借助传感器展示,有小伙伴问可不可以改成手势滑动操作(事件分发),所以出一篇文章 传感器相关文章链接:Android 3D效果的实现 一.小提 相对于常见的自定义view而言,继承的GLSurfaceView只有两个构造函数.可以理解为没有提供获取自定义属性的方法. public TouchSurfaceView(Context context) { super(context);

  • Android自定义软键盘的步骤记录

    目录 效果图 实现自定义软键盘 1.通过xml定义键盘 2.将xml文件与keyboardview绑定起来 3.处理点击事件onKey 附赠一些实用的效果处理 总结 效果图 还是咱们的老规矩,先放最终效果图

  • Android ExpandableListView使用方法案例详解

    目录 一.前言 二.实现的功能 三.具体代码 1.主xml代码 2.父布局xml代码 3.子布局xml代码 4.主activity代码 5.adapter代码 一.前言   "好记性不如烂笔头",再次验证了这句话是真的很有道理啊,一个月前看了一下ExpandableListView的使用,今天再看居然忘了这个是干啥的了,今天就详细讲解一下ExpandableListView的使用方法,感觉对于二级条目显示功能都可以实现. 二.实现的功能 1.可实现二级列表条目显示功能,具体包括可自定义

  • Android毕业设计记事本APP

    目录 前言 功能概述 系统设计 启动界面 引导界面 更改口令界面 主界面和编辑界面 1 建表 2 添加便签 3 在主界面显示便签 4 再次编辑该便签 5 主界面和编辑界面布局 前言 该设计是一款轻量级的便签工具,使用Android Studio开发,风格简练,可实现便签的添加.删除.修改.查看功能.为保证一定的安全性,设置了进入口令,类似于应用锁,用户可以修改口令.主要使用的技术有共享参数.数据库.SwipeRefreshLayout控件. 功能概述 用户打开应用后,启动页会判断用户是否第一次打

  • Android Intent与IntentFilter案例详解

    1. 前言        在Android中有四大组件,这些组件中有三个组件与Intent相关,可见Intent在Android整个生态中的地位高度.Intent是信息的载体,用它可以去请求组件做相应的操作,但是相对于这个功能,Intent本身的结构更值得我们去研究. 2. Intent与组件        Intent促进了组件之间的交互,这对于开发者非常重要,而且它还能做为消息的载体,去指导组件做出相应的行为,也就是说Intent可以携带数据,传递给Activity/Service/Broa

  • Android毕业设计备忘录APP

    目录 1.系统需求分析 1.2 系统需求 功能&说明 1.3 该项目涉及到的技术点 2.数据存储设计 2.1 SharedPrefenrences/SQLite存储介绍 SharedPrefenrences : SQLite存储 2.2数据表结构 3.具体编码及截图 3.1 主界面 3.2 各功能模块 4 总结 源码放到GitHub上了,大家可以看一下 https://github.com/become-better1/hh 1.系统需求分析 1.1 系统功能及框图 该项目实现了备忘录的创建,修

  • Android 破解视频App去除广告功能详解及解决办法总结

    Android 破解视频App去除广告功能 作为一个屌丝程序猿也有追剧的时候,但是当打开视频app的时候,那些超长的广告已经让我这个屌丝无法忍受了,作为一个程序猿看视频还要出现广告那就是打我脸,但是我有没有钱买会员,只能靠着毕生技能去耍耍去除广告了.下面就来介绍一下如何进行视频广告的去除. 一.视频广告播放原理 首先我们需要了解的一个基本知识点那就是广告其实也是一段视频,那么他肯定有请求地址和播放地址.那么我们的思路就来了,如果能够得到这些地址的话,我们就可以去除广告了,为什么呢?因为我们知道所

  • Android桌面组件App Widget用法入门教程

    本文实例讲述了Android桌面组件App Widget用法.分享给大家供大家参考.具体如下: Android开发应用除了程序应用,还有App Widget应用.好多人会开发程序应用而不会开发App Widget应用.本帖子就是帮助大家学习如何开发App Widget应用的. 先简单说说App Widget的原理.App Widget是在桌面上的一块显示信息的东西,通过单击App Widget跳转到程序入口类.而系统自带的程序,典型的App Widget是music,这个Android内置的音乐

  • Android桌面插件App Widget用法分析

    本文实例讲述了Android桌面插件App Widget用法.分享给大家供大家参考,具体如下: 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widget宿主.下面的截屏显示了一个音乐App Widget. appwidget 这篇文章描述了如何使用Ap

  • Android笔记之:App应用之发布各广告平台版本的详解

    Android的广告平台是很多的,各市场对各平台的接受程度是不一样的,Android的开发者如果想集成广告基本要考虑下面两个问题:(1)集成什么广告,会赚钱?(2)集成什么广告,不会被市场拒绝?最终的结果往往是折中的.第一个问题是广告平台的判断问题,我没有发言权去评论,本文主要是针对第二个问题展开.解决方案就是打包应用的不同广告平台版本,本文接下来逐一展开相关话题. 1. 基础本文其实是针对<Android笔记之:App模块化及工程扩展的应用>和<Android笔记之:App自动化之使用

  • Android开发之App widget用法实例分析

    本文实例讲述了Android开发之App widget用法.分享给大家供大家参考,具体如下: 放在桌面上的控件叫做--App widget,例如可以在桌面上添加按钮.图片等等控件,例如桌面播放器的控制面板 AppWidgetProviderInfo对象,它为App Widget提供元数据,包括布局.更新频率等等数据,这个对象不是由我们自己生成的,而是由android自己定义配置完成,这个对象被定义在XML文件中 1.定义AppWidgetProviderInfo对象,在res/xml文件夹当中定

  • Android如何实现APP自动更新

    先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP到各大应用市场的工作量就已经很大了,好不容易我们把APP都上传完了,突然发现一个会导致应用闪退的小Bug,这时那个崩溃啊,明明不是很大的改动,难道我们还要再去重新去把各大应用市场的版本再上传更新一次?相信我,运营人员肯定会弄死你的!! 有问题,自然就会有解决问题的方案,因此我们就会想到如果在APP里

  • Android桌面组件App Widget完整案例

    本文实例讲述了Android桌面组件App Widget用法.分享给大家供大家参考.具体如下: 这里模拟一个案例:把AppWidget添加到桌面后,点击AppWidget后AppWidget文本会轮回改变 main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a

  • Android开发微信APP支付功能的要点小结

    基本概念 包名值得是你APP的包,在创建工程时候设置的,需要在微信支付平台上面设置. 签名指的是你生成APK时候所用的签名文件的md5,去掉:全部小写,需要在微信支付平台上面设置. 调试阶段,签名文件可以使用调试用的debug.keystore,签名可以直接在eclipse上面查看,或者用工具查看 ,安装打开输入包名即可查看. 发布的时候一定需要在微信支付平台上面设置成发布用的签名值. 官方的Demo里面的内容并不是全是必须的,甚至只需要有libammsdk.jar就够了,AndroidMani

随机推荐