Android记事本

这篇具有很好参考价值的文章主要介绍了Android记事本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、项目需求分析

1.1、记事功能需求分析:

1.1.1、显示记事

用户打开记事本可以看到之前所写的所有记事内容,进入主页后,软件应该从数据库中搜索出该用户所写的全部记事,并将所有的数据进行显示。

1.1.2、添加记事

设置添加按钮,点击添加按钮之后可以编辑记事的标题和内容。

1.1.3、编辑记事

在主界面的记事列表中,点击一条记事,能够进行编辑,包括更改记事和删除记事。

1.1.4、查询记事

在主界面中设置查询功能,使用户可以通过对标题进行模糊查询。

1.2、账户管理

为了保护用户的隐私,在使用记事本时首先需要进行用户的登录,在登录账号之后才可以使用记事本的功能。

1.2.1、注册账号

使用记事本功能首先需要进行用户的注册,在注册过程中应注意用户名以及密码的正确输入才可注册成功。

1.2.2、登录

登录时需要对账号以及密码进行检测,如果账号密码正确即可进入记事本页面,使用记事本功能。

1.3、数据库需求分析

在该项目中使用了两个数据库表,分别为存储用户信息的users表以及存储记事本内容的note表。

1.4、界面需求分析

在该项目中,一个有六个页面,分别是用户界面activity_user、注册页面activity_register、记事本主页面activity_main、添加页面activity_add、编辑页面activity_edit、删除页面List_item_dialog。

总体布局以及背景色调使用简约风格。

2项目的设计

2.1、注册功能

android实现记事本功能,android

图 1 注册功能

2.2、登录功能

 

android实现记事本功能,android

图 2 登录功能

2.3、记事功能

android实现记事本功能,android

图 3 记事功能

3关键的代码

3.1、页面代码(部分)

3.1.1、用户界面activity_user.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar

        android:id="@+id/toolbar"

        android:layout_width="match_parent"

        android:layout_height="?attr/actionBarSize"

        android:background="?attr/colorPrimary"

        android:elevation="4dp"

        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

        app:title="@string/app_name">

    </androidx.appcompat.widget.Toolbar>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        android:layout_marginLeft="20dp"

        android:layout_marginRight="20dp"

        android:layout_marginTop="40dp"

        android:gravity="center_vertical"

        >

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="账号:"

            android:textSize="25sp"

            />

        <EditText

            android:id="@+id/et_account"

            android:layout_width="match_parent"

            android:hint="请输入用户名或手机号"

            android:layout_marginLeft="10dp"

            style="@style/MyEditStyle"

            android:inputType="text"

            />

    </LinearLayout>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        android:layout_marginLeft="20dp"

        android:layout_marginRight="20dp"

        android:layout_marginTop="20dp"

        android:gravity="center_vertical"

        >

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="密码:"

            android:textSize="25sp"

            />

        <EditText

            android:id="@+id/et_password"

            android:layout_width="match_parent"

            android:layout_height="50dp"

            android:hint="请输入密码"

            android:textSize="18sp"

            android:layout_marginLeft="10dp"

            android:paddingLeft="5dp"

            android:inputType="numberPassword"

            android:background="@drawable/edit_text_bg"

            />

    </LinearLayout>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal"

        android:gravity="center"

        android:layout_marginTop="20dp"

        android:layout_marginLeft="20dp"

        android:layout_marginRight="20dp"

        >

        <CheckBox

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="记住密码"

            />

        <CheckBox

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="自动登录"

            android:layout_marginLeft="40dp"

            />

    </LinearLayout>

    <Button

        style="@style/MyBtnStyle"

        android:id="@+id/btn_login"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="登录"

        />

    <Button

        style="@style/MyBtnStyle"

        android:id="@+id/btn_register"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="注册"

        />

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textColor="@color/colorPrimary"

        android:text="还没有账号?"

        android:layout_gravity="right"

        android:layout_marginRight="20dp"

        android:layout_marginTop="10dp"

        />

</LinearLayout>

3.1.2、记事本页面activity.main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity"

    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar

        android:id="@+id/toolbar"

        android:layout_width="match_parent"

        android:layout_height="?attr/actionBarSize"

        android:background="?attr/colorPrimary"

        android:elevation="4dp"

        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

        app:title="@string/app_name">

    </androidx.appcompat.widget.Toolbar>

    <FrameLayout

        android:layout_width="match_parent"

        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:id="@+id/rlv"/>

   <com.google.android.material.floatingactionbutton.FloatingActionButton

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:src="@android:drawable/ic_input_add"

            android:layout_gravity="right|bottom"

            android:layout_margin="20dp"

            android:onClick="add"

            />

    </FrameLayout>

</LinearLayout>

3.1.3、注册页面activity_register.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".RegisterActivity"

    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar

        android:id="@+id/toolbar"

        android:layout_width="match_parent"

        android:layout_height="?attr/actionBarSize"

        android:background="?attr/colorPrimary"

        android:elevation="4dp"

        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

        app:title="@string/app_name">

    </androidx.appcompat.widget.Toolbar>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="20dp"

        android:layout_marginTop="40dp"

        android:layout_marginRight="20dp"

        android:gravity="center_vertical"

        android:orientation="horizontal">

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="账 号:"

            android:textSize="25sp" />

        <EditText

            android:id="@+id/et_account1"

            style="@style/MyEditStyle"

            android:layout_width="match_parent"

            android:layout_marginLeft="10dp"

            android:hint="请输入用户名"

            android:inputType="text" />

    </LinearLayout>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="20dp"

        android:layout_marginTop="20dp"

        android:layout_marginRight="20dp"

        android:gravity="center_vertical"

        android:orientation="horizontal">

        <TextView

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="密 码:"

            android:textSize="25sp"

            />

        <EditText

            android:id="@+id/et_password1"

            style="@style/MyEditStyle"

            android:layout_width="match_parent"

            android:layout_marginLeft="10dp"

            android:hint="请输入密码"

            android:inputType="numberPassword" />

    </LinearLayout>

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginLeft="20dp"

        android:layout_marginTop="20dp"

        android:layout_marginRight="20dp"

        android:gravity="center_vertical"

        android:orientation="horizontal">

    </LinearLayout>

    <Button

        android:id="@+id/btn_register1"

        style="@style/MyBtnStyle"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="注册"

        android:onClick="register"

        />

    <CheckBox

        android:id="@+id/cb_agree"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="left"

        android:layout_marginLeft="20dp"

        android:layout_marginTop="10dp"

        android:text="还没有账号?"

        android:textColor="@color/colorPrimary" />

</LinearLayout>

3.2、实现类代码(部分)

3.2.1、用户登录类UserActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

public class UserActivity extends AppCompatActivity implements View.OnClickListener {

    private Button login,register;

    private EditText name,password;

    private UserDbHelper userDbHelper;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_user);

        userDbHelper = new UserDbHelper(this);

        find();

    }

    private void find(){

        login = findViewById(R.id.btn_login);

        register = findViewById(R.id.btn_register);

        name = findViewById(R.id.et_account);

        password = findViewById(R.id.et_password);

        login.setOnClickListener(this);

        register.setOnClickListener(this);

    }

    @Override

    public void onClick(View view) {

        int id = view.getId();

        if (id == R.id.btn_login){

            String s = name.getText().toString();

            String s1 = password.getText().toString();

                boolean login = userDbHelper.login(s,s1);

                if (login) {

                    Toast.makeText(this, "登陆成功!", Toast.LENGTH_SHORT).show();

                    Intent i = new Intent(this, MainActivity.class);

                    startActivity(i);

                }else {

                    Toast.makeText(this, "登陆失败!", Toast.LENGTH_SHORT).show();

                }

        }else if (id == R.id.btn_register){

            Intent i1 = new Intent(this,RegisterActivity.class);

                startActivity(i1);

        }

    }

}

3.2.2、记事本主页面MainActivity.java,在activity首先创建出来的时候,先进行onCreate方法,调用initData方法,调用之后会在数据库中查询数据;查询完数据之后,在调用initEvent方法,将数据存放渲染列表;接下来调用onResume方法,在refreshDataFromDb刷新数据库之后进行数据库查询;最后调用initEvent方法,渲染一个空的列表,重新进行上述过程。

package com.example.myapplication;

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import androidx.appcompat.widget.SearchView;

import androidx.appcompat.widget.Toolbar;

import androidx.recyclerview.widget.LinearLayoutManager;

import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.LinearLayout;

import com.example.myapplication.adaper.MyAdapter;

import com.example.myapplication.bean.Note;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;

    private FloatingActionButton mBtnAdd;

    private List<Note> mNotes;

    private MyAdapter mMyAdapter;

    private NoteDbOpenHelper mNoteDbOpenHelper;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        Toolbar toolbar = findViewById(R.id.toolbar);

        // 设置Toolbar为ActionBar

        setSupportActionBar(toolbar);

        initView();

        initData();

        initEvent();

    }

    protected void onResume(){

        super.onResume();

        refreshDataFromDb();

    }

    //重新拿到数据库中的信息

    private void refreshDataFromDb() {

        mNotes = getDataFromDB();

        mMyAdapter.refreshData(mNotes);

    }

    private void initEvent() {

        mMyAdapter = new MyAdapter(this,mNotes);

        mRecyclerView.setAdapter(mMyAdapter);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);

        mRecyclerView.setLayoutManager(linearLayoutManager);

    }

    private void initData() {

        mNotes = new ArrayList<>();

        mNoteDbOpenHelper = new NoteDbOpenHelper(this);

    }

    private List<Note> getDataFromDB()  {

        return mNoteDbOpenHelper.queryAllFromDb();

    }

    private String getCurrentTimeFormat(){

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd HH:mm:ss");

        Date date = new Date();

        return simpleDateFormat.format(date);

    }

    private void initView(){

        mRecyclerView = findViewById(R.id.rlv);

    }

    public void add(View view) {

        Intent intent =new  Intent(this,AddActivity.class);

        startActivity(intent);

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu){

        getMenuInflater().inflate(R.menu.menu_main,menu);

        SearchView searchView = (SearchView) menu.findItem(R.id.menu_serch).getActionView();

        //监听器

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            @Override

            public boolean onQueryTextSubmit(String query){

                return false;

            }

            @Override

            public boolean onQueryTextChange(String newText){

                mNotes = mNoteDbOpenHelper.queryFromDbByTitle(newText);

                mMyAdapter.refreshData(mNotes);

                return true;

            }

        });

        return super.onCreateOptionsMenu(menu);

    }

    @Override

    public boolean onOptionsItemSelected(@NonNull MenuItem item){

        return super.onOptionsItemSelected(item);

    }

}

3.2.3、用户数据库类UserDbHelper.java

package com.example.myapplication;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import com.example.myapplication.bean.User;

public class UserDbHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "users.db";

    private static final String create_users = "create table users(name varchar(32),password varchar(32))";

    public UserDbHelper(@Nullable Context context) {

        super(context, DB_NAME, null, 1);

    }

    @Override

    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        sqLiteDatabase.execSQL(create_users);

    }

    @Override

    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

    public long register(User u){

        SQLiteDatabase db = getWritableDatabase();

        ContentValues cv = new ContentValues();

        cv.put("name",u.getName());

        cv.put("password",u.getPassword());

        long users = db.insert("users",null,cv);

        return users;

    }

    public boolean login(String name,String password){

        SQLiteDatabase db1 = getWritableDatabase();

        boolean result = false;

        Cursor users = db1.query("users",null," name like ?",new String[]{name},null,null,null);

        if (users != null){

            while(users.moveToNext()){

                String password1 = users.getString(1);

                result = password1.equals(password);

                return result;

            }

        }

        return false;

    }

}

4页面展示以及测试用例

4.1、页面展示

4.1.1、用户登录界面

android实现记事本功能,android

图 4 登录页面

4.1.2、用户注册页面

android实现记事本功能,android        

 

图 5 注册页面

4.1.3、记事本主页面

 

android实现记事本功能,android

 

图 6 记事本主页面

4.1.4、添加页面

 android实现记事本功能,android      

 

     图 7 添加页面

4.1.5、编辑页面

android实现记事本功能,android

 

图 8 编辑页面

4.1.6、删除页面

     android实现记事本功能,android

 

图 9 删除页面

4.2、测试用例

4.2.1、登录注册用例

android实现记事本功能,android

 

图 10 登录用例

4.2.2、注册用例

android实现记事本功能,android

 

图 11 注册用例

android实现记事本功能,android

 

图 12 注册后数据库中的变化

4.2.3、添加记事测试用例

android实现记事本功能,androidandroid实现记事本功能,androidandroid实现记事本功能,android

图 13 添加记事测试用例

4.2.4、删除记事测试用例

android实现记事本功能,androidandroid实现记事本功能,androidandroid实现记事本功能,android

 

 

 

图 14 删除记事测试用例

5项目及课程总结

通过本次项目实践,将Android课程中的重点进行了运用,对Activity之间的通信、SQLite数据库操作、Service、和ListView等知识点有了更深入的了解,也让自己对这些要点的实践运用更加得心应手。

在本次项目中也出现了一些问题。再实现点击按钮进行登录注册操作中,R.id.XXX出现报错,无法进行页面的跳转。查找资料后发现,在ADT14之后,无法使用switch的case进行页面跳转。最后我使用了if-else语句将该问题解决。

通过本次项目,简单实现了一个记事本的功能,但是该项目还是较为简单,希望在日后对Android的不断学习中可以对该项目进行完善,增加一些额外的功能。文章来源地址https://www.toymoban.com/news/detail-774462.html

到了这里,关于Android记事本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio——记事本案例

    一、布局界面         1、记事本界面布局 main_notepad.xml         2、记事本Item布局界面 activity_item.xml         3、添加、修改界面布局 activity_record.xml 二、封装记录信息实体类         记事本的每个记录都会有记录内容和记录时间这两个属性,因此需要建立一个实体类用于存

    2024年02月05日
    浏览(36)
  • Android开发_记事本(1)

    TextView中有下述几个属性: id: 为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id! layout_width: 组件的宽度,一般写: wrap_content 或者 match_parent(fill_parent) ,前

    2023年04月10日
    浏览(56)
  • 基于Android Studio 开发的简易记事本

    🍅 文章末尾有获取完整项目源码方式 🍅 目录 一、引言 视频效果展示: 图片效果展示: 二、详细设计 1.首页 2.添加和修改页面 3.登录页 4.注册页 三、获取源码          Android初学者开发第一个完整的基础实例项目应该就属《记事本》了,该项目基于Android Studio开发使用

    2024年02月05日
    浏览(43)
  • 基于Android的记事本设计和模块开发

    有一万五千字论文,完美运行。 由于编程技术的迅速发展,各种记事本APP随处可见,在人们的日常生活中经常使用的到。于是各种记事本APP也跟着发展起来。本文在通过在Android Studio开发平台上开发一个简单的多功能语音输入记事本APP的过程,同时了解记事本APP的功能实现,

    2024年02月03日
    浏览(46)
  • Android 备忘录,记事本程序设计

    android备忘录实现,使用ObjectBox数据库框架进行数据存储,增删改查等操作。代码使用kotlin编写。 1、下面看看ObjectBox数据库封装 需要注意的是:    /**      * 你只有配置好之后, 点击 Make Model \\\'你的model名字\\\', 才会创建 MyObjectBox对象      * 对于MyObjectBox的包名, 目前我发现的

    2024年01月23日
    浏览(38)
  • Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率

    public MyBaseAdapter(Context context, List data) { this.context = context; this.data = data; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public int getCount() { if(data==null) return 0; return data.size(); } } 接着在编写NoteAdapter类继承上类,初始化view, 将Note条目的

    2024年04月25日
    浏览(41)
  • 基于Android平台的记事本软件(Android Studio项目+报告+app文件)

    移动应用开发技术 期末考核报告 题    目:         基于 Android 平台的记事本软件              学生姓名                               学生学号                               专      业                            班     级

    2024年02月08日
    浏览(40)
  • 【Android 记事本,笔记本,可注册登录,增删改查(附源码)】

    简介 用Sqlite做数据库,用来存储账号以及笔记信息,实现了账号的注册以及登录功能,笔记方面实现了新增、删除、修改、搜索功能,列表展示笔记使用的是listView(懒得弄分割线,就使用listView的默认分割线了); 运行效果 代码讲解 我代码里使用了两个依赖,一个是工具

    2024年02月04日
    浏览(39)
  • 【Java】实现记事本(完整版)

    💕💕💕大家好,这是作业侠系列之Java实现记事本,还是那句话,我的粉丝们需要源码直接qq邮箱+你需要的源码私发我即可哦,大家觉得还行的话,期待你们的三连,这也是我创作的最大动力💕💕💕 往期源码回顾: 【Java】实现绘图板(完整版) 【C++】图书管理系统(完整板

    2024年02月08日
    浏览(46)
  • vue实现记事本(无样式版)

    实现了增、删功能,任务统计,全删除功能。

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包