【Android开发基础】SQLite开发复刻通讯录、记事本、计算机

news2024/11/17 13:46:11

文章目录

    • 一、引言
    • 二、设计
      • 1、通讯录
        • (1)效果
        • (2)思路
        • (3)实现
      • 2、记事本
        • (1)效果
        • (2)思路
        • (3)实现
    • 三、附件
      • 1、计算器UI界面设计
      • 2、源代码

一、引言

  • 描述:通讯录、记事本、计算器这已经很常见了,基本每台手机都有。那么还有学习设计的必要吗?当然,初学者学习一套技术时,必然要先学会复刻,然后再创新。复刻是技术提升的过程,创新是技术深度的证明。没有生而知之者,更没有抄袭之说,只能说我们是站在巨人的肩膀上观澜世界。
  • 知识点:
    1、SQLite数据库的使用
    2、按钮样式设计
    3、点击、长按事件的使用
    4、全局样式的修改
  • 难度:初级

二、设计

1、通讯录

(1)效果

在这里插入图片描述

(2)思路

       对于数据的管理肯定就是最最基本的增删改查,这是毋庸置疑的。初学者在五天内能够将这些操作做到滚瓜烂熟就已经非常不错了。剩下的就交个Intent组件进行通讯的跳转和连接。

(3)实现

因为效果简单,我就不封装数据库操作方法,只贴主要代码,源码请看附件。

  • Insert
db = myhelper.getWritableDatabase();
values = new ContentValues();
values.put("name",name);
values.put("phone",phone);
db.insert("listphone",null,values);
Toast.makeText(this,"信息添加成功",Toast.LENGTH_SHORT).show();
db.close();
  • Update
db = myhelper.getReadableDatabase();
values = new ContentValues();
if (TextUtils.isEmpty(names.getText())){
    Toast.makeText(this,"所需要修改的姓名不能为空!!",Toast.LENGTH_SHORT).show();
    break;
} else if (update_id == null){
    values.put("phone" , phone = phones.getText().toString());
    db.update("listphone",values,"name=?",new String[]{names.getText().toString()});
    Toast.makeText(this,"信息修改成功!!",Toast.LENGTH_SHORT).show();
} else {
    values.put("name" , phone = names.getText().toString());
    values.put("phone" , phone = phones.getText().toString());
    db.update("listphone",values,"_id=?",new String[]{update_id});
    Toast.makeText(this,"信息修改成功!!",Toast.LENGTH_SHORT).show();
}
db.close();
  • Delete
db = myhelper.getReadableDatabase();
if (TextUtils.isEmpty(names.getText())){
    Toast.makeText(this,"请输入需要删除的联系人!!",Toast.LENGTH_SHORT).show();
    break;
}
db.delete("listphone", "name=?",new String[]{names.getText().toString()});
Toast.makeText(this,"信息删除成功!!",Toast.LENGTH_SHORT).show();
db.close();
  • Query
db = myhelper.getReadableDatabase();
Cursor cursor = db.query("listphone",null,null,null,null,null,null);
cursor.moveToFirst();
data = new ArrayList<>();
next = new ArrayList<>();
ids = new ArrayList<>();
if (cursor.getCount() == 0){
    Toast.makeText(this,"通讯录为空!!",Toast.LENGTH_SHORT).show();
} else {
    ids.add(cursor.getString(0));
    data.add(cursor.getString(1));
    next.add(cursor.getString(2));
} while (cursor.moveToNext()){
    ids.add(cursor.getString(0));
    data.add(cursor.getString(1));
    next.add(cursor.getString(2));
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.phine_list,R.id.li,data);
ArrayAdapter<String> adapter1 = new ArrayAdapter<>(this,R.layout.phine_list,R.id.li,next);
list.setAdapter(adapter);
list1.setAdapter(adapter1);
cursor.close();
db.close();]

2、记事本

(1)效果

在这里插入图片描述

(2)思路

数据操作也是增删改查,但是更多的则是一些需求的完成。
比如:
1、字体加粗、字体放大/放小、斜体等基本字体操作
2、删除,总不能点进去删,需要局外遍历删除,是长按还是滑动?
3、搜索,模糊搜索,搜索的字段有哪些?

(3)实现

数据库操作在通讯录里已经写过同样的操作,这里就不重复了,就写点其他功能。

  • 长按
AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder( NotepadActivity.this)
        .setMessage("是否删除此事件?")
        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Notepbook notepadBean = list.get(position);
                if(mSQLiteHelper.deleteData(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.dismiss();
            }
        });
dialog =  builder.create();
dialog.show();
  • 字体样式
case R.id.bin_bold:  // 加粗
    content.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
    break;
case R.id.bin_italic:  // 斜体
    content.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));
    break;
case R.id.bin_a:  // 变小
    fend -= 5;
    content.setTextSize(fend);
    break;
case R.id.bin_A:  // 变大
    fend += 5;
    content.setTextSize(fend);
    break;

三、附件

1、计算器UI界面设计

计算器就当是给初学者练习的项目

  • 效果
    在这里插入图片描述
  • 代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:background="#666"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/main_01"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:textColor="#fff"
        android:gravity="center_vertical|right"
        android:background="#F0F0F0"/>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/main_01"
        android:layout_marginTop="20dp">

        <Button
            android:id="@+id/text_ac"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:background="@drawable/shape_w"
            android:text="AC"
            android:textColor="#000"/>

        <Button
            android:id="@+id/user_1"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_toRightOf="@id/text_ac"
            android:background="@drawable/shape_w"
            android:text="±"
            android:textColor="#000" />

        <Button
            android:id="@+id/user_bai"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_toRightOf="@id/user_1"
            android:background="@drawable/shape_w"
            android:text="%"
            android:textColor="#000" />

        <Button
            android:id="@+id/text_chu"
            style="@style/textStyle2"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_toRightOf="@id/user_bai"
            android:background="@drawable/shape_o"
            android:text="÷" />

        <Button
            android:id="@+id/text_01"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_ac"
            android:background="@drawable/shape_b"
            android:text="1" />

        <Button
            android:id="@+id/text_02"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_ac"
            android:layout_toRightOf="@id/text_01"
            android:background="@drawable/shape_b"
            android:text="2" />

        <Button
            android:id="@+id/text_03"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_ac"
            android:layout_toRightOf="@id/text_02"
            android:background="@drawable/shape_b"
            android:text="3" />

        <Button
            android:id="@+id/text_jia"
            style="@style/textStyle2"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_chu"
            android:layout_toRightOf="@id/user_bai"
            android:background="@drawable/shape_o"
            android:text="+" />

        <Button
            android:id="@+id/text_04"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_01"
            android:background="@drawable/shape_b"
            android:text="4" />

        <Button
            android:id="@+id/text_05"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_01"
            android:layout_toRightOf="@id/text_04"
            android:background="@drawable/shape_b"
            android:text="5" />

        <Button
            android:id="@+id/text_06"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_01"
            android:layout_toRightOf="@id/text_05"
            android:background="@drawable/shape_b"
            android:text="6" />

        <Button
            android:id="@+id/text_jiang"
            style="@style/textStyle2"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_jia"
            android:layout_toRightOf="@id/user_bai"
            android:background="@drawable/shape_o"
            android:text="-" />

        <Button
            android:id="@+id/text_07"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_04"
            android:background="@drawable/shape_b"
            android:text="7" />

        <Button
            android:id="@+id/text_08"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_04"
            android:layout_toRightOf="@id/text_07"
            android:background="@drawable/shape_b"
            android:text="8" />

        <Button
            android:id="@+id/text_09"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_04"
            android:layout_toRightOf="@id/text_08"
            android:background="@drawable/shape_b"
            android:text="9" />

        <Button
            android:id="@+id/text_cheng"
            style="@style/textStyle2"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_jiang"
            android:layout_toRightOf="@id/user_bai"
            android:background="@drawable/shape_o"
            android:text="×" />

        <Button
            android:id="@+id/text_00"
            style="@style/textStyle1"
            android:layout_width="160dp"
            android:layout_height="80dp"
            android:layout_below="@id/text_07"
            android:background="@drawable/shape"
            android:text="0" />

        <Button
            android:id="@+id/text_dian"
            style="@style/textStyle1"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_07"
            android:layout_toRightOf="@id/text_00"
            android:background="@drawable/shape_b"
            android:text="." />

        <Button
            android:id="@+id/text_deng"
            style="@style/textStyle2"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_below="@id/text_cheng"
            android:layout_toRightOf="@id/user_bai"
            android:background="@drawable/shape_o"
            android:text="=" />
    </RelativeLayout>


</RelativeLayout>

2、源代码

gitee下载地址:
 
1、通讯录:https://gitee.com/xu-pq/android-demo/tree/master/Android_Sqlite
 
2、记事本:https://gitee.com/xu-pq/android-demo/tree/master/Android_Notebook2
 
3、计算器:https://gitee.com/xu-pq/android-demo/tree/master/diyic

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这是国内“颜值最高”的大学生知识交流社区

【WRITE-BUG数字空间】要“颜值”有“颜值”&#xff0c;要“内涵”有“内涵”&#x1f60e; 界面UI紧随潮流、符合大学生的审美&#xff0c;功能更是完备&#xff1a; &#x1f449; 提供聊天大厅&#xff0c;即时群聊、畅所欲言 &#x1f449; 提供协同编辑的云文档&#xff…

代码随想录| day11|栈与队列part02 ● 20. 有效的括号● 1047. 删除字符串中的所有相邻重复项● 150. 逆波兰表达式求值

20. 有效的括号 链接&#xff1a;代码随想录 阅读答案并二刷。 class Solution { public:bool isValid(string s) {int ns.size();int i0;//建立括号栈stack<char>sta;while(i<n){char temps[i];if(temp(||s[i]{||s[i][){sta.push(temp);}else{if(sta.empty()){return…

Halcon 光盘一维码识别 曲面一维码识别 识别光盘上的条形码(极坐标变换,将曲面的一维码转成矩形的一维条码)

文章目录 1 问题描述2 关键代码演示2.1 分割CD上包含条形码的环2.2 极坐标变换 将环状条码转成矩形条码3 完整代码1 问题描述 如图 识别光盘上的条形码 图片路径 C:\Users\hp\AppData\Roaming\MVTec\HALCON-22.11-Steady\examples\images2 关键代码演示 2.1 分割CD上包含条形…

项目管理专业人员能力等级评价CSPM(国标评级)你想知道的这都有

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

Vue中如何进行文件预览与打印?

Vue中如何进行文件预览与打印&#xff1f; 在Vue应用中&#xff0c;有时我们需要实现文件预览和打印的功能。比如&#xff0c;我们可能需要预览并打印PDF文件、图片文件等。本文将介绍如何在Vue中实现文件预览和打印的功能&#xff0c;并提供相应的代码示例。 文件预览 PDF文…

“混战”大模型,知乎、小红书、快手各有所长

配图来自Canva可画 一直以来&#xff0c;追逐风口都是互联网企业的天性。因此&#xff0c;继元宇宙风口之后&#xff0c;横空出世并火遍全国的AIGC和ChatGPT&#xff0c;便又成为了各行业企业追逐的焦点。在此背景下&#xff0c;无论是国内互联网大厂&#xff0c;还是科技公司…

力扣笔记(每日随机一题)—— 打强整数

问题&#xff08;中等&#xff09; 给定三个整数x 、 y 和 bound &#xff0c;返回 值小于或等于 bound 的所有 强整数 组成的列表 。 如果某一整数可以表示为 x i y j x^i y^j xiyj &#xff0c;其中整数 i > 0 且 j > 0 i > 0 且 j > 0 i>0且j>0&a…

jmeter009:用户自定义变量

添加路径&#xff1a;线程组>配置元件>用户自定义变量 (用户自定义变量)元件的使用&#xff1a;

vue 打开重复页签

先上图 这两个红色框线实际都是产品详情页面&#xff0c;用产品名称替代了页面的title 1、首先在router/index.js配置路由 {path: /productDetail,component: Layout,hidden: true,children: [{path: productDetail/:productId(\\d), //必须该种方法传递参数component: () &…

超高频工业rfid读头对比高频读头有哪些优势?

超高频的工作频段主要在860MHz~960MHz之间&#xff0c;对比高频RFID来说&#xff0c;超高频技术的传输速度更快&#xff0c;读取距离也更远&#xff0c;批量群读的性能也更好&#xff0c;因此在工业、物流与供应链等领域都有非常广泛的应用。 超高频工业rfid读头对比高频读头有…

Java通过jni调用C语言函数,IntelliJ IDEA,CLion,动态链接库dll,本地方法,native

Java通过jni调用C语言函数 使用的工具 IntelliJ IDEACLion 开始之前的注意事项 确保安装了mingw并配置了环境变量&#xff08;下载地址&#xff1a;https://udomain.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds…

【2023】华为OD机试真题Java CC++ Python JS Go-题目0245-信号发射和接收

题目0245-信号发射和接收 题目描述 有一个二维的天线矩阵,每根天线可以向其他天线发射信号,也能接收其他天线的信号,为了简化起见,我们约定每根天线只能向东和向南发射信号,换言之,每根天线只能接收东向或南向的信号。 每根天线有自己的高度anth,每根天线的高度存储在…

软件之禅(五)Input 出场

黄国强 2023/06/12 这篇文章我们引入新的概念&#xff0c;即输入&#xff08;Input&#xff09;。类似 Output &#xff0c;Input 也有多种输入形式。同样我们也需要做个设计&#xff0c;封装后续的变化。继续上代码。 / // 输入类class Input; using InputPtr std::shared_p…

8. 原子操作类

Atomic 翻译成中文是原子的意思。在化学上&#xff0c;我们知道原子是构成一般物质的最小单位&#xff0c;在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候&#xff0c;一个操作一旦开始&#xff0c;就不会被其他线程干…

SIMD加速矩阵运算

一、SIMD指令简介 SIMD的全称叫做&#xff0c;单指令集多数据&#xff08;Single Instruction Multiple Data&#xff09;。最直观的理解就是&#xff0c;向量计算。比如一个加法指令周期只能算一组数&#xff08;一维向量相加&#xff09;&#xff0c;使用SIMD的话&#xff0…

应届生求职个人简历模板(合集)

应届生求职个人简历模板1 基本信息 姓 名&#xff1a; 性别&#xff1a; 婚姻状况&#xff1a; 民族&#xff1a; 户 籍&#xff1a; 年龄&#xff1a; 现所在地&#xff1a; 身高&#xff1a; 联系电话&#xff1a; 电子邮箱&#xff1a;__ 求职意向 希望岗位&#xff1a;Web前…

【建议】强烈推荐ES6函数自由传参的写法,针对方法体的可扩展性很有帮助

let fun({a,b,c}{a:1,b:2,c:3})>{console.log(a);console.log(b);console.log(c); } 接下来我们即可自由传参&#xff0c;需要什么就传递什么 以上写法非常适用于需求变更的情况下自由传递参数&#xff0c;而且形参的数量、传参先后顺序可以根据业务自由搭配&#xff0c;非常…

Feign接口windows启动调用正常,Linux环境调用404

1、Linux环境启动之后报错 如下&#xff1a; windows 是调用正常得 反复测试好几轮 还是这样 &#xff0c;nacos都是注册进去得 helper-service 调用 xTIMS-Web 解决&#xff1a;FeignClient注解 不配置URL会出现那样问题&#xff0c; 配置URL之后 解决 &#xff0c;不报错了…

延迟队列--DelayQueue(JDK)

JDK自身支持延迟队列的数据结构&#xff0c;其实类&#xff1a;java.util.concurrent.DelayQueue。 我们通过阅读源码的方式理解该延迟队列类的实现过程。 1.定义 DelayQueue:是一种支持延时获取元素的无界阻塞队列。 特性&#xff1a; 线程安全&#xff1b; 内部元素有“…

人工智能算力需求稳增,中国将持续夯实算力底座

中国始终强调科技兴国的重要性。数字经济时代&#xff0c;技术的力量更为凸显。近年来&#xff0c;中国政府相关部门相继发布一系列政策&#xff0c;更加明确了人工智能对于提升中国核心竞争力的重要支撑作用&#xff0c;加上新基建、数字经济等持续利好政策的推动&#xff0c;…