Android(Jetpack)
JetpackJetpack是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码,并简化我们的开发过程。Jetpack中的组件有一个特点,它们大部分不依赖于任何Android系统版本,这意味着这些组件通常是定义在AndroidX库当中的,并且拥有非常好的向下兼容性。 MVVM架构ViewModelViewModel是可以帮助Activity分担一部分工作,它是专门用于存放与界面相关的数据的。只要是界面上能看得到的数据,它的相关变量都应该存放在ViewModel中,而不是Activity中,这样可以在一定程度上减少Activity中的逻辑。ViewModel还有一个非常重要的特性。我们都知道,当手机发生横竖屏旋转的时候,Activity会被重新创建,同时存放在Activity中的数据也会丢失。而ViewModel的生命周期和Activity不同,它可以保证在手机屏幕发生旋转的时候不会被重新创建,只有当Activity退出的时候才会跟着Activity一起销毁。导入外部依赖:implementation...
Android入门(Material Design)
一套全新的界面设计语言——Material DesignToolbor不仅仅继承了ActionBar的所有功能,而且灵活性很高,可以配合其他控件完成一些Material Design的效果. 任何一个新建的项目都会默认支持ActionBar,他被在AndroidManifest中声明,也就是被定义在了android:theme="@style/AppTheme">主题中。他的默认配置如下: 123456789<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item>...
Android入门(网络)
WebView可以在应用中嵌入一个浏览器,从而展示各种网页 使用HTTP请求访问网络HttpURLConnection12345678910111213141516171819202122//他的流程是://先设置一个Url地址,然后通过url打开一个连接并强转为HttpURLConnection并保存为一个connection对象//为这个对象设置请求方法,超时时间如.然后获取他的输入流,然后读取即可。thread {val string = StringBuilder()val url = URL("https://zfxt.top/sentence")val connection = url.openConnection() as HttpURLConnectionconnection.requestMethod = "GET"connection.connectTimeout=8000connection.readTimeout=8000val input = connection.inputStreamval...
Android入门(Service的使用)
Serviceservice是android实现程序后台运行的解决方案。当然它并不是独立运行,而是依赖于应用程序,应用程序停止时,他也会一起停止。Service并不会自动开启线程,所有的代码都是默认运行在主线程当中的。 Android多线程编程 在kotlin中开启线程的方式更加简单。它为你定义了顶层方法thread{//方法体}直接在其中写内容,然后他会被拉起为一个新线程。 更新UI:和许多其他的GUI库一样,Android的UI也是线程不安全的。也就是说,如果想要更新应用程序里的UI元素,必须在主线程中进行,否则就会出现异常。 所以android提供了一套异步消息处理机制:解决了在子线程进行UI操作的问题1234567891011121314151617181920212223242526class MainActivity : AppCompatActivity() { val updateText = 1 val handle = object...
Android入门(使用多媒体)
使用通知功能通知渠道:自Android8.0后引入的新概念。每个应用程序可以自由的创建当前应用应该拥有哪些通知渠道。而这些通知渠道的控制权掌握在用户手中。用户可以选择是否响铃、是否振动或者是否要关闭这个渠道的通知。对于应用而言,,通知渠道一旦创建就不可修改。所以一定要设计好有哪些渠道需要设计。 通知渠道的基本使用 首先需要一个NotificationManager对通知进行管理。可以通过调用Context的getSystemService()方法获取。这个方法接收一个参数用于确定获取系统的那个服务,如:val manager = getSystemService(Context.NOTIFICATION_SERVICE) as...
Android使用Bee框架使用数据库
首先导入所需要的依赖项 12345678// https://mvnrepository.com/artifact/org.teasoft/bee implementation 'org.teasoft:bee:2.1.7'// https://mvnrepository.com/artifact/org.teasoft/honey implementation 'org.teasoft:honey:2.1.7'// https://mvnrepository.com/artifact/org.teasoft/bee-ext implementation 'org.teasoft:bee-ext:2.1.7' // https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc implementation...
kotlin的foreach如何实现break和continue
如何在kotin的forEach中实现break和continue?先说结论 break的实现:1234567891011fun main() { run{ (1..10).forEach { if(it%3==0) return@run println(it) } }}//结果12 这是官方推荐的方法:但是这个实现break的方法有些丑陋,凭空添加一层壳子。而网上有关于类似的做法,比如通过filter或者find预知你要判断的数,但是往往我们的break的地方不能只是在开头或者结尾用来跳过某些数,如例子而是一些特定的逻辑后,可以结束循环。 continue的实现:1234567891011121314fun main() { (1..10).forEach { if(it%3==0) return@forEach println(it) ...
Android入门(数据持久化)
文件存储写入文件Context提供了一个openFileOutput()方法,他需要两个参数,第一个参数是文件名,不准带路径,因为所有的文件都会默认保存到/data/data/<package name>/files/下,第二个参数是操作模式,主要有MODE_PRIVATE和MODE_APPEND一个是覆写,一个是追加。openFileOutput()返回的是一个outputstream() 读取文件Context提供了一个openFileInput(),他只需要一个参数,就是文件名,它返回的是一个inputstream流。系统会自动到/data/data/<package...
Android入门(广播机制)
两种广播机制: 标准广播:完全异步执行的广播,几乎所有接受者都会同时受到这个广播消息。这种广播效率高,这也意味着它不能被截断 有序广播:同步执行的广播,根据接收者优先级顺序依次发送。而且中途可以被截断。A–>B–>C;B可以在中途截断广播的传输。 接受系统广播android内置了很多系统级别的广播,比如手机开机,电量变化。这些都可以接收。 动态接收12345678910111213141516171819202122232425262728293031class MainActivity : AppCompatActivity() { //声明一个时间改变接收器,它继承自BroadcastReceiver lateinit var timeChangeReceiver: TimeChangeReceiver override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ...