自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 Android第一行代码——快速入门 Kotlin 编程(9.2 使用通知)

可以看到,这次的通知不是在系统状态栏显示一个小图标了,而是弹出了一个横幅,并附带了 通知的详细内容,表示这是一条非常重要的通知。比如高重要等级的通知渠道发出的通知可以弹出横幅、发出声音,而低重要等级的通知渠道发出的通知不仅可能 会在某些情况下被隐藏,而且可能会被改变显示的顺序,将其排在更重要的通知之后。对于每个应用来说,通知渠道的划分是非常考究的,因为通知渠道一旦创建之后就不能再修改 了,因此开发者需要仔细分析自己的应用程序一共有哪些类型的通知,然后再去创建相应的通 知渠道。通知的重要等级主要有。

2024-04-02 11:28:23 999

原创 Android第一行代码——快速入门 Kotlin 编程(12.7 可折叠式标题栏)

那么话不多说,这 就开始吧。不过,在Android 5.0 系统之前,我们是无法对状态栏的背景或颜色进行操作的,那个时候也还 没有Material Design 的概念,但是Android 5.0 及之后的系统都是支持这个功能的。这里定义的大多数属 性我们是已经见过的,就不再解释了,只有一个。的主题,其实对于这部分我们也并不陌生,因为之前在 activity_main.xml 中给 Toolbar 指定的也是这个主题,只不过这里要实现更加高级的 Toolbar 效果,因此需要将这个主题的指定提到上一层来。

2024-03-30 16:36:00 992

原创 Android第一行代码——快速入门 Kotlin 编程(12.6 下拉刷新)

SwipeRefreshLayout 就是用于实现下拉刷新功能的核心类,我们把想要实现下拉刷新功能的 控件放置到 SwipeRefreshLayout 中,就可以迅速让这个控件支持下拉刷新。现在可以重新运行一下程序了,在屏幕的主界面向下拖动,会有一个下拉刷新的进度条出现, 松手后就会自动进行刷新了,效果如 图12.16 所示。方法来设置一 个下拉刷新的监听器,当用户进行了下拉刷新操作时,就会回调到 Lambda 表达式当中,然后 我们在这里去处理具体的刷新逻辑就可以了。方法来设置一 个下拉刷新的监听器。

2024-03-30 11:33:25 808

原创 Android第一行代码——快速入门 Kotlin 编程(12.5 卡片式布局)

其实并不难理解,由于 RecyclerView 和Toolbar 都是放置在 CoordinatorLayout 中的,而前面已经说过, CoordinatorLayout 就是一个加强版的 FrameLayout ,那么 FrameLayout 中的所有控件在不进行明确定位的情况下,默认都会摆放在布局的左上角,从而产生了遮挡的现象。而使用Glide 就完全不 需要担心这回事,Glide 在内部做了许多非常复杂的逻辑操作,其中就包括了图片压缩,我们只 需要安心按照Glide 的标准用法去加载图片就可以了。

2024-03-29 15:49:35 967

原创 Android第一行代码——快速入门 Kotlin 编程(12.4 悬浮按钮和可交互提示)

打个比方,如果我们在执行删除操作的时候只弹出 一个Toast 提示,那么用户要是误删了某个重要数据的话,肯定会十分抓狂吧,但是如果我们增加一个Undo 按钮,就相当于给用户提供了一种弥补措施,从而大大降低了事故发生的概率,提升了用户体验。举个简单的例子,刚才弹出的 Snackbar 提示将悬浮按钮遮挡住了,而如果我们能让 CoordinatorLayout 监听到Snackbar 的弹出事件,那么它会自动将内部的 FloatingA ctionButton 向上偏移,从而确保不会被Snackbar 遮挡。

2024-03-29 11:29:13 568

原创 Android第一行代码——快速入门 Kotlin 编程(12.3 滑动菜单)

在 RelativeLayout 中我们放置了3个控件,CircleImageView 是一个用于将图片圆形化的控 件,它的用法非常简单,基本和 ImageView 是完全一样的,这里给它指定了一张图片作为头像,然后设置为居中显示。首先它是一个布局,在布局中允许放入两个直接 子控件:第一个子控件是主屏幕中显示的内容,第二个子控件是滑动菜单中显示的内容。Material Design 的魅力就在于 此,它具有非常美观的设计理念,只要你按照它的各种规范和建议来设计界面,最终做出来的 程序就是特别好看的。

2024-03-29 10:04:04 836

原创 Android第一行代码——快速入门 Kotlin 编程(12.2 Toolbar)

可以看到,Toolbar 上现在显示了两个 action 按钮,这是因为 Back up 按钮指定的显示位置是 always ,Delete 按钮指定的显示位置是ifRoom ,而现在屏幕空间很充足,因此两个按钮都会 显示在Toolbar 中。不过下面的部分就稍微有点难理解了,由于我们刚才在 styles.xml 中将程序的 主题指定成了浅色主题,因此 Toolbar 现在也是浅色主题,那么 Toolbar 上面的各种元素就会自动使用深色系,从而和主体颜色区别开。其实这是根据项目中指定的主题来显示的。

2024-03-28 17:31:59 772

原创 Android第一行代码——快速入门 Kotlin 编程(10.6 Kotlin课堂:泛型的高级特性)

在JDK 1.5之前,Java 是没有泛型功能的,那个时候诸如 List 之类的数据结构可以存储任意类型的数据,取出数据的时候也需要手动向下转型才行,这不仅麻烦,而且很危险。内联函数中的代码会在编译的时候自动被替换到调用它的地方,这样的话也就不存 在什么泛型擦除的问题了,因为代码在编译之后会直接使用实际的类型来替代内联函数中的泛 型声明,其工作原理如 图10.15 所示。所有基于 JVM 的语言,它们的泛型功能都是通过类型擦除机制来实现的,其中当然也包括了 Kotlin。其次,在声明泛型的地方必须加上。

2024-03-28 14:05:28 734

原创 Android第一行代码——快速入门 Kotlin 编程(10.5 Service 的更多技巧)

前台 Service 和普通Service 最大的区别就在于,它一直会有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果,如 图10.11 所示。话说回来,在本章一开始的时候我们就已经知道,Service 中的代码都是默认运行在主线程当中 的,如果直接在 Service 里处理一些耗时的逻辑,就很容易出现 ANR(Application Not Responding )的情况。以上所学的内容都是关于 Service 最基本的一些用法和概念,当然也是最常用的。

2024-03-28 11:42:42 1007

原创 Android第一行代码——快速入门 Kotlin 编程(10.3 Service的基本用法)

首先看一下如何在项目中定义一个 Service。新建一个 ServiceTest 项目,然后右击 com.example.servicetest→New→Service→Service ,会弹出如图10.4 所示的窗口。图10.4 创建 Service 的窗口可以看到,这里我们将类名定义成 MyService ,Exported属性表示是否将这个 Service 暴露给外部其他程序访问,Enabled属性表示是否启用这个Service。将两个属性都勾中,点击“Finish” 完成创建。

2024-03-28 11:04:39 731

原创 Android第一行代码——快速入门 Kotlin 编程(10.2 Android 多线程编程)

当我们需要执行一些耗时操作,比如发起一条网络请求时,考虑到网速等其他原因,服务器未必能够立刻响应我们的请求,如果不将 这类操作放在子线程里运行,就会导致主线程被阻塞,从而影响用户对软件的正常使用。当然,目前我们自定义的 DownloadTask 还是一个空任务,并不能进行任何实际的操作,我们还需要重写 AsyncTask 中的几个方法才能完成对任务的定制。一条 Message 经过以上流程的辗转调用后,也就从子线程进入了主线程,从不能更新 UI 变成了可以更新UI,整个异步消息处理的核心思想就是如此。

2024-03-28 09:58:24 620

原创 Android第一行代码——快速入门 Kotlin 编程(8.5 Kotlin 课堂:泛型和委托)

在本章中,我们一开始先了解了 Android 的权限机制,并且学会了如何在 Android 6.0 以上的系统中使用运行时权限,然后重点学习了 Content rovider 的相关内容,以实现跨程序数据共享的功能。这么说确实没错,但如果我们只是让大部分的方法实现调用辅助对象中的方法,少 部分的方法实现由自己来重写,甚至加入一些自己独有的方法,那么。在一般的编程模式下,我们需要给任何一个变量指定一个具体的类型,而泛型允许我们在不指定具体类型的情况下进行编程,这样编写出来的代码将会拥有更好 的扩展性。

2024-03-27 17:45:41 748

原创 Android第一行代码——快速入门 Kotlin 编程(8.2.2 在程序运行时申请权限)

但是,如果我们在Android 6.0 或者更高版本系统的手机上运行,点击 “Make Call” 按 钮就没有任何效果了,这时观察 Logcat 中的打印日志,你会看到如 图8.4 所示的错误信息。在开始动手之前,你需要考虑一下到底要申请什么权限,其实 表8.1 中列出的所有权限 都是可以申请的,这里简单起见,我们就使用。由于用户还没有授权过我们拨打电话权限,因此第一次运行会弹出这样一个权限申请的对话 框,用户可以选择同意或者拒绝,比如说这里点击了“Deny” ,结果如 图8.6 所示。

2024-03-27 16:38:00 828

原创 Android第一行代码——快速入门 Kotlin 编程(7.6 Kotlin课堂:高阶函数的应用)

在上一章的Kotlin 课堂中,我们学习了高阶函数应该如何使用,而本章的Kotlin 课堂里,我们将会学习高阶函数具体可以用在哪里。KTX 中提供的功能必然是有限的,但是掌握了它们背后的实现原理,你将可以 对无限的API进行更多的扩展。高阶函数非常适用于简化各种API的调用,一些API的原有用法在使用高阶函数简化之后,不管 是在易用性还是可读性方面,都可能会有很大的提升。好好掌握这个知识点,以后在诸多其他API 的使用方面,我们都可以使用这个技巧,让 API变得更加简单。首先,我们通过扩展函数的方式向。

2024-03-27 15:38:31 535

原创 Android第一行代码——快速入门 Kotlin 编程(7.3 SharedPreferences 存储)

也就是说, 当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。你应该已经感觉到了,使用 SharedPreferences 存储数据是非常简单的,不过下面还有更好的消息,因为从 SharedPreferences 文件中读取数据会更加简单。了,这个时候如果重新启动登录界面,就会从 SharedPreferences 文件中将保存的账号和 密码都读取出来,并填充到文本输入框中,然后把记住密码复选框选中,这样就完成记住密码的功能了。

2024-03-27 11:45:02 955

原创 Android第一行代码——快速入门 Kotlin 编程(7.2 文件存储)

字符串肯定会被填充到 EditText 中,然后编写一点其他的内容,比如在 EditText 中输入“Hello world” ,接着按下 Back 键退出程序,再重新启动程序,这时刚才输入的内容并不会丢失,而是还原到了 EditText 中,如 图7.4 所示。不过,正如我前面所说,文件存储的方式并不适合用于保存一些较为复杂的结构型数据,因 此,下面我们就来学习一下 Android 中另一种数据持久化的方式,它比文件存储更加简单易用, 而且可以很方便地对某些指定的数据进行读写操作。

2024-03-27 10:18:53 538

原创 Android第一行代码——快速入门 Kotlin 编程(7.1 持久化技术简介)

数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机 的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设 备中的数据是处于持久状态的。持久化技术提供了一种机制,可以让数据在瞬时状态和持久状 态之间进行转换。持久化技术被广泛应用于各种程序设计领域,而本节要探讨的自然是Andr oid 中的数据持久化技 术。

2024-03-27 09:15:57 207 1

原创 Android第一行代码——快速入门 Kotlin 编程(6.5 Kotlin课堂:高阶函数详解)

高阶函数和 Lambda 的关系是密不可分的。在第2章快速入门 Kotlin 编程的时候,我们已经学习 了 Lambda 编程的基础知识,并且掌握了一些与集合相关的函数式 API 的用法,如mapfilter函数等。另外,在第 3 章的 Kotlin 课堂中,我们又学习了 Kotlin 的标准函数,如runapply函数等。你有没有发现,这几个函数有一个共同的特点:它们都会要求我们传入一个 Lambda 表达式作为参数。

2024-03-27 09:09:44 561

原创 Android第一行代码——快速入门 Kotlin 编程(6.4 广播的最佳实践:实现强制下线功能)

其实实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进 行任何其他操作,必须点击对话框中的“确定”按钮,然后回到登录界面即可。这样强制下线的功能就不会依附于任何界面了,不管是在程序的任何地方,只要发出这样一条广播,就可以完成强制下线的操作了。这时点击一下发送广播的按钮,就会发出一条强制下线的广播,ForceOfflineReceiver 收到这条广播后会弹出一个对话框,提示用户已被强制下线,如 图6.11 所示。现在我们就准备通过一个完整例子的实 践,综合运用一下本章所学到的知识。

2024-03-26 17:02:41 2263

原创 Android第一行代码——快速入门 Kotlin 编程(6.3 发送自定义广播)

现在你已经学会了通过 BroadcastReceiver 来接收系统广播,接下来我们就要学习一下如何在应用程序中发送自定义的广播。前面已经介绍过了,广播主要分为两种类型:标准广播和有序 广播。本节我们就通过实践的方式来看一下这两种广播具体的区别。

2024-03-26 15:33:14 610

原创 Android第一行代码——快速入门 Kotlin 编程(6.2 接收系统广播)

我们可以根据自己感兴趣的广播,自由地注册 BroadcastReceiver ,这样当有相应的广播发出时,相应的 BroadcastReceiver 就能够收到该广播,并可以在内部进行逻辑处理。隐式广播指的是那些没有具体指定发送给哪个应用程序的广播,大多数系统广播属于隐式广播,但是少数特 殊的系统广播目前仍然允许使用静态注册的方式来接收。在开机的时候,我们的应用程序肯定是没有启动的, 因此这个功能显然不能使用动态注册的方式来实现,而应该使用静态注册的方式来接收开机广 播,然后在。需要注意的 是,不要在。

2024-03-26 14:12:14 702

原创 Android第一行代码——快速入门 Kotlin 编程(6.1 广播机制简介)

为什么说 Android 中的广播机制更加灵活呢?这是因为 Android 中的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会收到自己所关心的广播内容,这些广播可能是来自 于系统的,也可能是来自于其他应用程序的。Android 提供了一套完整的 API,允许应用程序自由地发送和接收广播。发送广播的方法其实之前稍微提到过,如果你记性好的话,可能还会有印象,就是借助我们第 3 章学过的 Intent。而接收广播的方法则需要引入一个新的概念—— BroadcastReceiver。

2024-03-26 11:15:45 261

原创 Android第一行代码——快速入门 Kotlin 编程(5.6 Kotlin 课堂:扩展函数的运算符重载)

首先你了解了 Fragment 的基本概念和使用场景,然后 通过几个实例掌握了 Fragment 的常见用法,随后学习了 Fragment 生命周期的相关内容以及动态加载布局的技巧,最后在本章的最佳实践部分将前面所学的内容综合运用了一遍,相信你已 经将 Fragment 相关的知识点都牢记在心,并可以较为熟练地应用了。另外,本章的 Kotlin 课堂 可以说是格外充实,我们学习了扩展函数和运算符重载这两种非常有用的技术,并结合这两种技术实现了一些非常有趣的功能。关键字,就可以 实现运算符重载的功能了。

2024-03-26 11:05:56 610

原创 Android第一行代码——快速入门 Kotlin 编程(5.5 Fragment 的最佳实践:一个简易版的新闻应用)

这样我们就把新闻内容的 Fragment 和布局都创建好了,但是它们都是在双页模式中使用的,如 果想在单页模式中使用的话,我们还需要再创建一个 Activity。除此之外,这里还使用了一条垂直方向的细线,它的作用 是在双页模式时将左侧的新闻列表和右侧的新闻内容分隔开。可以看出,在双页模式下,我们同时引入了两个Fragment ,并将新闻内容的 Fragment 放在了 一个 FrameLayout 布局下,而这个布局的 id 正是 newsContentLayout。变量判断当前是单页还是双页模式。

2024-03-26 09:56:15 675

原创 Android第一行代码——快速入门 Kotlin 编程(5.4 动态加载布局的技巧)

这就意味着,当程序运行在屏幕宽度大于等于600 dp 的设备上时,会加载layoutsw600dp/activity_main 布局,当程序运行在屏幕宽度小于600 dp 的设备上时,则仍然加载 默认的 layout/activity_main 布局。如果你经常使用平板,应该会发现很多平板应用采用的是双页模式(程序会在左侧的面板上显 示一个包含子项的列表,在右侧的面板上显示内容),因为平板的屏幕足够大,完全可以同时 显示两页的内容,但手机的屏幕就只能显示一页的内容,因此两个页面需要分开显示。

2024-03-25 17:11:54 486

原创 Android第一行代码——快速入门 Kotlin 编程(5.3 Fragment 的生命周期)

其中,Activity 中有的回调方法, Fragment 中基本上也有,不过Fragment 还提供了一些附加的回调方法,下面我们就重点看一 下这几个回调。和 Activity 一样,Fragment 也有自己的生命周期,并且它和 Activity 的生命周期实在是太像 了,我相信你很快就能学会,下面我们马上就来看一下。当一个 Activity 进入停止状态时,与它相关联的 Fragment 就会进入停止状态,或者通过调用FragmentTransaction 的。方法,最终将 Fragment 销毁。

2024-03-25 16:25:25 997

原创 Android第一行代码——快速入门 Kotlin 编程( 5.2 Fragment 的使用方式)

说实在的,这个问题并没有看上去那么复杂,它的基本思路非常简单:首先在一个Fragment 中可以得到与它相关联的 Activity ,然后再通过这个 Activity 去获取另外一个 Fragment 的实例, 这样就实现了不同 Fragment 之间的通信功能。在上一节当中,你已经学会了在布局文件中添加 Fragment 的方法,不过 Fragment 真正的强大之处在于,它可以在程序运行时动态地添加到 Activity 当中。介绍了这么多抽象的东西,是时候学习一下 Fragment 的具体用法了。

2024-03-25 15:55:13 739

原创 Android第一行代码——快速入门 Kotlin 编程(5.1 Fragment 是什么)

那么究竟要如何使用 Fragment 才能充分地利用平板屏幕的空间呢?因此,更好的设计方案是将新闻标题列表界面和新闻详细内容界面分别放在两个 Fragment 中, 然后在同一个 Activity 里引入这两个 Fragment ,这样就可以将屏幕空间充分地利用起来了,如 图5.3 所示。可是如果在平板上也这么设计,那么新闻标题列表将会被拉长至填充满整个平板的屏幕,而新 闻的标题一般不会太长,这样将会导致界面上有大量的空白区域,如 图5.2 所示。

2024-03-25 14:47:10 300

原创 Android第一行代码——快速入门 Kotlin 编程(4.8 Kotlin课堂:延迟初始化和密封类)

另外 在最后的 Kotlin 课堂中,我们还学习了延迟初始化和密封类的用法,并借助它们进一步完善了最 佳实践环节的代码,结合实例来学习,相信你已经将这些知识点掌握得非常牢固了。到目前为止,代码都是没有问题的,但比较让人讨厌的是,接下来我们不得不再编写一个else条 件,否则Kotlin 编译器会认为这里缺少条件分支,代码将无法编译通过。而当你的代码中有了越来越多的全局变量实例时,这个问题就会变得越来越明显,到时候你 能必须编写大量额外的判空处理代码,只是为了满足 Kotlin 编译器的要求。

2024-03-25 14:38:52 937 1

原创 Android第一行代码——快速入门 Kotlin 编程(4.7 编写界面的最佳实践)

我们可以在图片的 4 个边框绘制一个个的小黑点,在上边框和左边框绘制的部分表示当图片需要 拉伸时就拉伸黑点标记的区域,在下边框和右边框绘制的部分表示内容允许被放置的区域。最后记得要将原来的 message_left.png 图片删除,只保留制作好的 message_left.9.png 图片 即可,因为 Android 项目中不允许同一文件夹下有两张相同名称的图片(即使后缀名不同也不 行)。我们还是通过一个例子来看一下吧。这样当图片需要拉伸的时候,就可以只拉伸指定的区域,程序在外观上也有了很大的改进。

2024-03-25 11:35:48 963 1

原创 Android第一行代码——快速入门 Kotlin 编程(4.6 更强大的滚动控件:RecyclerView)

还有,ListView 的扩展性也不够好, 它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView 是做不到的。这 里告诉你一个小窍门,当你不能确定最新的版本号是多少的时候,可以就像上述代码一样填入 1.0.0 ,当有更新的库版本时,Android Studio 会主动提醒你,并告诉你最新的版本号是多少, 如图4.32 所示。方法中注册点击事件。我们已经知道,ListView 的扩展性并不好,它只能实现纵向滚动的效果,如果想进行横向滚动的话,ListView 就做不到了。

2024-03-22 17:32:02 1114 1

原创 Android第一行代码——快速入门 Kotlin 编程(4.5 最常用和最难用的控件:ListView)

话说回来,ListView 的滚动毕竟只是满足了我们视觉上的效果,可是如果 ListView 中的子项不 能点击的话,这个控件就没有什么实际的用途了。这些数据可以从网上下 载,也可以从数据库中读取,应该视具体的应用程序场景而定。虽然目前我们定制的界面还很简单,但是相信你已经领悟到了诀窍,只要修改 fruit_item.xml 中的内容,就可以定制出各种复杂的界面了。由于手机屏幕空间比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助 ListView。

2024-03-21 17:49:09 781 1

原创 Android第一行代码——快速入门 Kotlin 编程(4.4 创建自定义控件)

在前两节我们学习了Android中的一些常用控件和基本布局的用法,不过当时我们并没有关注这些控件和布局的继承结构,现在是时候来看一下了,如 图4.25所示。图4.25 常用控件和布局的继承结构可以看到,我们所用的所有控件都是直接或间接继承自 View的,所用的所有布局都是直接或间接继承自 ViewGroup的。View是Android中最基本的一种UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在 View的基础上。

2024-03-21 15:18:12 973 1

原创 Android第一行代码——快速入门 Kotlin 编程(4.3 详解3种基本布局)

当然,布局的内部除了放置控件外,也可以放置布局,通过多层布局的嵌套,我们就能够完成一些比较复杂的界面实现,图4.15 很好地展示了它们之间的关系。相信你之前也已经注意到了,我们在上一节中 学习控件用法时,所有的控件就都是放在 LinearLayout 布局里的,因此上一节中的控件也确实是在垂直方向上线性排列的。Button 1 和父布局的左上角对 齐,Button 2 和父布局的右上角对齐,Button 3 居中显示,Button 4 和父布局的左下角对齐, Button 5 和父布局的右下角对齐。

2024-03-21 14:14:16 1199 1

原创 Android第一行代码——快速入门 Kotlin 编程(4.2 常用空间的使用方法)

本节所讲的内容对于你来说只是起到了一个引导的作用,你还需要在以后的学习和工作中不断地 摸索,通过查阅文档以及网上搜索的方式学习更多控件的更多用法。其实我们没有必要去记忆这个语法糖的具体规则是什么样的,在编写代码的时候直接调用它的实际方法就可以了,Android Studio 会自动在代码提示中显示使用语法糖后的优化代码调用, 如图4.8 所示。Android 给我们提供了大量的 UI 控件,合理地使用这些控件就可以非常轻松地编写出相当不错的界面,下面我们就挑选几种常用的控件,详细介绍一下它们的使用方法。

2024-03-21 10:58:58 956 1

原创 Android第一行代码——快速入门 Kotlin 编程(3.7 Kotlin课堂:标准函数和静态方法)

因此每章的 Kotlin 课堂里,我都会结合所在章节的内容,拓展出更多Kotlin 的使用技巧,这将会是你提升自己 Kotlin 水平的绝佳机会。函数也是极其类似的,都要在某个对象上调用,并且只接收一个 Lambda 参数,也会在 Lambda 表达式中提供调用对象的上下文,但是apply函数无法指定返回值,而是会自动返回调用对象本身。好了,关于Kotlin 的标准函数就讲到这里,本书后面的章节中还将会有大量使用标准函数的代码 示例,到时候你会对它们掌握得越来越熟练。那么这个函数有什么作用呢?

2024-03-20 17:25:55 662 1

原创 Android第一行代码——快速入门 Kotlin 编程(3.6 Activity 的最佳实践)

最重要的一点就是一目了然,SecondActivity 所需要的数据在方法参 数中全部体现出来了,这样即使不用阅读 SecondActivity 中的代码,不去询问负责编写 SecondActivity 的同事,你也可以非常清晰地知道启动 SecondActivity 需要传递哪些数据。虽然知识点只有这么多,但运用的技巧却是多种多样的。养成一个良好的习惯,给你编写的每个 Activity 都添加类似的启动方法,这样不仅可以让启动 Activity 变得非常简单,还可以节省不少你同事过来询问你的时间。

2024-03-20 16:31:44 1943 1

原创 Android第一行代码——快速入门 Kotlin 编程(3.5 Activity 的启动模式)

standard是 Activity 默认的启动模式,在不进行显式指定的情况下,所有 Activity 都会自动使用这种启动模式。其实从打印信息中就可以明显看出,在 SecondActivity 中启动 FirstActivity 时,会发现返回栈 中已经存在一个 FirstActivity 的实例,并且是在 SecondActivity 的下面,于是 SecondActivity 会从返回栈中出栈,而 FirstActivity 重新成为了栈顶 Activity ,因此 FirstActivity 的。

2024-03-20 14:57:04 592 1

原创 Android第一行代码——快速入门 Kotlin 编程(3.4 Activity 的生命周期)

那么想象以下场景: 应用中有一个 Activity A ,用户在 Activity A 的基础上启动了 Activity B ,Activity A 就进入了 停止状态,这个时候由于系统内存不足,将 Activity A 回收掉了,然后用户按下 Back 键返回 Activity A ,会出现什么情况呢?我们每启动一个新的 Activity ,就会覆盖在原 Activity 之上,然后点击 Back 键会销毁最上面的 Activity ,下面的 一个 Activity 就会重新显示出来。

2024-03-20 10:48:33 922 1

原创 Android第一行代码——快速入门 Kotlin 编程(3.3 使用 Intent 在 Activity 之间穿梭)

使用隐式 Intent ,不仅可以启动自己程序内的 Activity ,还可以启动其他程序的 Activity ,这就使多个应用程序之间的功能共享成为了可能。需要注意的是,虽然我们声明了 ThirdActivity 是可以响应打开网页的 Intent 的,但实际上这个 Activity 并没有加载并显示网页的功能,所以在真正的项目中尽量不要出现这种有可能误导用户的行为,不然会让用户对我们的应用产生负面的印象。现在重新运行程序,在 FirstActivity 的界面点击一下按钮,你会发现,程序崩溃了!

2024-03-19 18:25:22 1196 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除