Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率

这篇具有很好参考价值的文章主要介绍了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条目的各项信息展示出来,其中还自定义了一个viewHolder类,方便对xml文件中的各项组件进行绑定编辑。

public class NoteAdapter extends MyBaseAdapter {

public NoteAdapter(Context context, List data) {

super(context, data);

}

@Override

public View getView(int i, View view, ViewGroup viewGroup) {

ViewHolder viewHolder;

if(view==null){

viewHolder=new ViewHolder();

LayoutInflater inflater = LayoutInflater.from(context);

view = inflater.inflate(R.layout.item_main_list, viewGroup, false);

viewHolder.tv_lv_month = (TextView) view.findViewById(R.id.tv_lv_month);

viewHolder.tv_lv_day= (TextView) view.findViewById(R.id.tv_lv_day);

viewHolder.tv_lv_title = (TextView) view.findViewById(R.id.tv_lv_title);

viewHolder.tv_lv_content = (TextView) view.findViewById(R.id.tv_lv_content);

viewHolder.layout = (LinearLayout) view.findViewById(R.id.Linelayout);

view.setTag(viewHolder);

}

else{

viewHolder = (ViewHolder) view.getTag();

}

viewHolder.tv_lv_month.setText(data.get(i).getUpdate_date().split(“-”)[1]);

viewHolder.tv_lv_day.setText(data.get(i).getUpdate_date().split(“-”)[2]);

viewHolder.tv_lv_title.setText(data.get(i).getTitle());

viewHolder.tv_lv_content.setText(data.get(i).getText());

if(data.get(i).getBackground()!=null){

viewHolder.layout.setBackgroundColor(Color.parseColor(data.get(i).getBackground()));

}

return view;

}

class ViewHolder{

TextView tv_lv_month;

TextView tv_lv_day;

TextView tv_lv_title;

TextView tv_lv_content;

LinearLayout layout;

}

}

3.5 记事本的背景色设置


进入到上述提到的编辑模式2中,也就是ContentActivity中,在其底部设置更改背景色功能。这里运用到了会话框的弹出AlertDialog。设置三种颜色。点击确认后,更改数据文件中相应记事条目Note的Background属性。接着进行调用onResume();使其重新载入数据文件中的记事条目得到背景色的更改。功能截图如下:

| 背景选项 | 设置成功 |

| — | — |

| Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端 | Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端 |

部分关键代码如下:

ivSettings.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

AlertDialog.Builder builder = new AlertDialog.Builder(ContentActivity.this);

builder.setIcon(R.drawable.fab_settings);

builder.setTitle(“选择一个背景色”);

// 指定下拉列表的显示数据

final String[] colors = {“护眼色”, “薰衣淡紫”, “粉粉粉”};

builder.setItems(colors, new DialogInterface.OnClickListener()

{

@Override

public void onClick(DialogInterface dialog, int which)

{

Toast.makeText(ContentActivity.this, “选择的背景色为:” + colors[which], Toast.LENGTH_SHORT).show();

switch (which){

case 0:

new NoteManager(mContext).updateBackground(title,“#C7EDCC”);

onResume();

break;

case 1:

new NoteManager(mContext).updateBackground(title,“#E6E6FA”);

onResume();

break;

case 2:

new NoteManager(mContext).updateBackground(title,“#FC9D9A”);

onResume();

break;

default:

break;

}

}

});

builder.show();

}

});

3.6 记事本的闹铃功能


该功能的实现思路为,为闹钟设置闹铃后,在该记事条目对应得ContentActvity的右上角会显示闹铃的时间,长按该闹铃时间戳则可删除该闹铃,同时闹铃到达指定时间后,会在程序中弹出提示框并且在手机通知栏也会有消息提醒。功能截图如下:

| 设置闹钟 | 闹钟设置完成 | 通知栏响应 |

| — | — | — |

| Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端 | Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端 | Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端 |

首先是闹铃时间的设定,这里要对ContentActivity实现相应的设置日期时间的接口。

public class ContentActivity extends AppCompatActivity

implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener{

@Override

public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

alarm_year=year;

alarm_month=monthOfYear+1;

alarm_day=dayOfMonth;

}

@Override

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

alarm_hour=hourOfDay;

alarm_minute=minute;

alarm=alarm_year+“/”+alarm_month+“/”+alarm_day+" “+alarm_hour+”:"+alarm_minute;

av.setText(“Alert at “+alarm+”!”);

av.setVisibility(View.VISIBLE);

Log.d(“ContentActivity”,“alarm”+alarm);

new NoteManager(mContext).updateAlarm(title,alarm);

loadAlarm(alarm, title, 0);

Toast.makeText(this,“Alarm will be on at “+alarm+” !”,Toast.LENGTH_LONG).show();

}

}

接着就是开始设置闹铃:

public void setAlarm(View v) {

if(alarm.length()<=1) {

//if no alarm clock has been set up before

//show the current time

Calendar c=Calendar.getInstance();

alarm_hour=c.get(Calendar.HOUR_OF_DAY);

alarm_minute=c.get(Calendar.MINUTE);

alarm_year=c.get(Calendar.YEAR);

alarm_month=c.get(Calendar.MONTH)+1;

alarm_day=c.get(Calendar.DAY_OF_MONTH);

}

else {

//show the alarm clock time which has been set up before

int i=0, k=0;

while(i<alarm.length()&&alarm.charAt(i)!=‘/’) i++;

alarm_year=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

while(i<alarm.length()&&alarm.charAt(i)!=‘/’) i++;

alarm_month=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

while(i<alarm.length()&&alarm.charAt(i)!=’ ') i++;

alarm_day=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

while(i<alarm.length()&&alarm.charAt(i)!=‘:’) i++;

alarm_hour=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

alarm_minute=Integer.parseInt(alarm.substring(k));

}

new TimePickerDialog(this,this,alarm_hour,alarm_minute,true).show();

new DatePickerDialog(this,this,alarm_year,alarm_month-1,alarm_day).show();

}

同样的,监听该view,若被响应则调用onResume();

长按删除闹铃功能这里就不再赘述了,接下来来详细讲解如何调用通知栏的通知功能。部分关键代码:

private void loadAlarm(String alarm, String title, int days) {

int alarm_hour=0;

int alarm_minute=0;

int alarm_year=0;

int alarm_month=0;

int alarm_day=0;

int i=0, k=0;

while(i<alarm.length()&&alarm.charAt(i)!=‘/’) i++;

alarm_year=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

while(i<alarm.length()&&alarm.charAt(i)!=‘/’) i++;

alarm_month=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

while(i<alarm.length()&&alarm.charAt(i)!=’ ') i++;

alarm_day=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

while(i<alarm.length()&&alarm.charAt(i)!=‘:’) i++;

alarm_hour=Integer.parseInt(alarm.substring(k,i));

k=i+1;i++;

alarm_minute=Integer.parseInt(alarm.substring(k));

Intent intent = new Intent(ContentActivity.this, OneShotAlarm.class);

intent.putExtra(“alarm_title”,title);

PendingIntent sender = PendingIntent.getBroadcast(

ContentActivity.this, 0, intent, 0);

Calendar calendar = Calendar.getInstance();

calendar.setTimeInMillis(System.currentTimeMillis());

Calendar alarm_time = Calendar.getInstance();

alarm_time.set(alarm_year,alarm_month-1,alarm_day,alarm_hour,alarm_minute);

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

am.set(AlarmManager.RTC_WAKEUP, alarm_time.getTimeInMillis(), sender);

}

在上述关键代码中,可以看到在loadAlarm函数中使用了Intent来传递闹铃时间的消息给OneShotAlarm类,且是再闹铃设置完成后,构建一个PendingIntent广播,通过AlarmManager在时间到达指定的闹铃事件后,发出广播,接收到广播的OneShotAlarm类做出回应,在通知栏显示通知。

这里要先在AndroidManifest.xml设置广播接收器:

<receiver

android:name=“.utils.OneShotAlarm”

android:process=“:remote” />

接下来让我们看看OneShortAlarm类,当OneShotAlarm收到广播后,则构建通知消息并在通知栏显示。同时该类中设置了通知消息显示的内容,有该记事本程序名,记事条目的标题,该记事创建时间戳以及记事内容。通过构造Notification类实现该消息。部分关键代码如下:

public class OneShotAlarm extends BroadcastReceiver {

private String alarm_title;

@Override

public void onReceive(Context context, Intent intent) {

alarm_title=intent.getStringExtra(“alarm_title”);

Toast.makeText(context,“Time UP!”,Toast.LENGTH_LONG).show();

Vibrator vb =(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);

vb.vibrate(300);

showNotice(context);

}

private void showNotice(Context context) {

Intent intent=new Intent(context,ContentActivity.class);

Note record = new NoteManager(context).get(alarm_title);

new NoteManager(context).deleteAlarm(alarm_title);

PendingIntent pi=PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

NotificationManager manager=(NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

Notification notification=new NotificationCompat.Builder(context)

.setContentTitle(record.getCreate_date())

.setContentText(record.getText())

.setWhen(System.currentTimeMillis())

.setSmallIcon(R.mipmap.ic_launcher)

.setLargeIcon(BitmapFactory.decodeResource(context.getResources(),R.drawable.icon))

.setContentIntent(pi)

.setAutoCancel(true)

//.setStyle(new NotificationCompat.BigTextStyle().bigText(record.getMainText()))

.setLights(Color.GREEN,1000,1000)

.build();

manager.notify(0,notification);

}

}

3.7 高级搜索


在早先就有了解到一些动态搜索框现成的源码,这里则使用了一些网上开源的搜索框控件的使用。

首先需要添加第三方依赖,'com.quinny898.library.persistentsearch:library:1.1.0-SNAPSHOT’就可以使用了。该搜索框还支持语音输入识别,但这里因为在设计时并没有考虑语音识别功能,所以这里就弃用了该功能。

附上功能截图:

Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端

<com.quinny898.library.persistentsearch.SearchBox

android:layout_width=“wrap_content”

android:id=“@+id/searchbox”

android:layout_height=“wrap_content”/>

设置完成后,需要对显示搜索到的记事条目,内容,及搜索到的记事条目总和进行显示,这里布局设计如下:

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical”>

<ListView

android:id=“@+id/history_lis_search”

android:layout_marginLeft=“20dp”

android:layout_marginRight=“20dp”

android:layout_marginBottom=“5dp”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:background=“@drawable/border_bottom_null”>

<ListView

android:id=“@+id/content_lis_search”

android:layout_marginLeft=“20dp”

android:layout_marginRight=“20dp”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:background=“@drawable/border_bottom_null”>

<TextView

android:id=“@+id/bottom_search”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_marginTop=“10dp”

android:gravity=“center_horizontal” />

接着则是代码的实现,实现该功能代码网上有很多现成的实例,这里实现起来并没有看起来的那么复杂,稍微学习后则可写出自己想要的代码:

public class SearchActivity extends AppCompatActivity {

private Context mContext;

private SearchBox sbSearch;

private TextView tvBottom;

//数据列表

private List listSearch;

//结果列表

private List listResult;

private ListView mSearchResult ;

private SearchAdapter mResultAdapter ;

private ListView mHistory ;

private HistoryAdapter mHistoryAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_search);

mContext = this;

bindViews();

}

@Override

protected void onResume() {

super.onResume();

initData();

init();

initSearchView();

initHistory();

updateBottom();

}

private void initData() {

//本地可供检索数据获取,每次resume就要重新渲染

listSearch = new NoteManager(mContext).getNoteList();

}

private void bindViews() {

mSearchResult = (ListView) findViewById(R.id.content_lis_search);

sbSearch = (SearchBox) findViewById(R.id.searchbox);

tvBottom = (TextView) findViewById(R.id.bottom_search);

mHistory = (ListView) findViewById(R.id.history_lis_search);

}

public void init(){

listResult = new ArrayList<>();

mResultAdapter = new SearchAdapter(SearchActivity.this, listResult);

mSearchResult.setAdapter(mResultAdapter);

mSearchResult.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

manageKeyBoard();

NoteManager noteManager=new NoteManager(mContext);

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

boolean isOpen = imm.isActive();

if (isOpen) imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘

noteManager.ItemClick(listResult.get(position));

}

});

}

private void initSearchView(){

sbSearch.enableVoiceRecognition(this);

sbSearch.setMenuListener(new SearchBox.MenuListener(){

@Override

public void onMenuClick() {

reBack();

}

});

sbSearch.setSearchListener(new SearchBox.SearchListener(){

@Override

public void onSearchOpened() {

//Use this to tint the screen

}

@Override

public void onSearchClosed() {

//Use this to un-tint the screen

}

@Override

public void onSearchTermChanged(String term) {

search(term);

updateBottom();

if(listResult.size()==0){

mHistory.setVisibility(View.VISIBLE);

}else {

mHistory.setVisibility(View.GONE);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端
Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端
Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端
Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端

总结:

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。

  • 点击此处,与我们一起交流学习

文件夹有以下学习笔记,自行下载!

  • BAT大厂面试题、独家面试工具包,

  • 资料免费领取,包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,

    Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端
    编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-i5VeAIYb-1711380274829)]
[外链图片转存中…(img-FPOsMPAV-1711380274829)]
[外链图片转存中…(img-jPzvTNCt-1711380274830)]
[外链图片转存中…(img-qWV6Qkrj-1711380274830)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-e2TmO8TA-1711380274830)]

总结:

各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。

  • 点击此处,与我们一起交流学习

文件夹有以下学习笔记,自行下载!

  • BAT大厂面试题、独家面试工具包,

  • 资料免费领取,包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,

    [外链图片转存中…(img-TPrt0foG-1711380274830)]
    Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率,程序员,android,小程序,前端文章来源地址https://www.toymoban.com/news/detail-857947.html

到了这里,关于Android:实现安卓小程序-记事本(备忘录)的开发,教你如何增加拿到BAT大厂offer几率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 安卓手机上哪个支持语音输入的记事本软件好用?

    作为一个需要经常记录各种琐碎信息的人,我深知一款好用的记事本软件有多重要。因为在它的协助下,我可以对信息进行快捷记录、轻松查看。并且,随着科技的发展,有些记事本软件已经不再满足于简单的文字输入,而是新增了多个记事方式,比如说语音输入,让我们对

    2024年02月08日
    浏览(56)
  • 【windows程序设计作业】用c#语言实现记事本

    使用Visual C# 2015设计一个Windows应用程序——记事本,通过本章的学习,可以进一步掌握MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。 实现

    2024年02月05日
    浏览(63)
  • 【安卓开发】开源Notepad记事本APP项目(完整代码+说明文档)

    作业:记事本APP。要求: (1) 给出实现源程序,对源程序加以说明; (2) 给出屏幕运行结果的截图,运行结果含有个人特征; (3) 用word文档提交,文件名:班号-姓名-学号后3位-作业。 1.页面设计美观,可以正确显示数据(20分)。 2.实现数据保存、查询、修改和读取功能(20分

    2023年04月12日
    浏览(62)
  • Android记事本

    1、项目需求分析 1.1、记事功能需求分析: 1.1.1、显示记事 用户打开记事本可以看到之前所写的所有记事内容,进入主页后,软件应该从数据库中搜索出该用户所写的全部记事,并将所有的数据进行显示。 1.1.2、添加记事 设置添加按钮,点击添加按钮之后可以编辑记事的标题

    2024年02月03日
    浏览(57)
  • Android Studio——记事本案例

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

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

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

    2023年04月10日
    浏览(67)
  • Android——记事本功能业务(完整代码)

    目录 实现效果 一、搭建记事本页面布局activity_notepad.xml 二、搭建记事本界面Item布局notepad_item_layout.xml 三、封装记录信息实体类NotepadBean类 四、编写记事本界面列表适配器NotepadAdapter类 五、创建数据库 六、实现记事本界面的显示功能NotepadAdapter.java  七、搭建添加记录界面和

    2024年02月03日
    浏览(75)
  • Android——多功能记事本(Android Studio)

    拍照 添加画板 录音 书写转文字 添加图片 1,主页面 2,功能 贴代码: 1,AndroidManifest.xml文件(添加权限) 2,Activity文件 ActivityRecord AddActivity DatabaseOperation GetCutBitampLocation HandWriteActivity LineEditActivity MainActivity PaintActivity PaintView ShowPicture ShowRecord TouchView 3,最后res中drawable文件

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

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

    2024年02月03日
    浏览(54)
  • 基于Android Studio 开发的简易记事本

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

    2024年02月05日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包