jetpack compose(入门)
为什么我们需要一个新的UI 工具?原因是 View.java 这个类实在是太大了,有太多的代码,它大到你甚至无法在Githubs上查看该文件,因为它实际上包含了 30000 行代码,这很疯狂,而我们所使用的几乎每一个Android UI 组件都需要继承于View. Compose API 的原则 Compose是一个声明式UI系统。 他的一切都是函数 在Compose的世界中,没有类的概念,全都是函数,并且都是顶层函数,因此不会有任何继承和层次机构问题。 组合优于继承 信任单一来源 Compose运行Core 绘制(Draw) Draw 给了你访问Canvas的能力,因此你可以绘制你要的任何自定义View 布局(Layout) 通过布局,我们可以测量事物并相应地放置视图 输入(Input)开发人员可以通过输入访问事件并执行手势 语义(Semantics) 我们可以提供有关树的语义信息 FoundationFoundation的核心是收集上面提到的所有内容,并共同创建一个抽象层 ,以使开发人员更轻松调用 Material在这一层。所有的Material组件将会被提供,并且我们可...
Android(开发开源库)
只要是编写一个库提供给其他的项目去使用,就可以统称为SDK开发。SDK开发多数情况下是以实现功能逻辑为主的,而不会有ui设计。SDK开发面向的用户群体从来都不是普通用户,而是其他开发者。 简化运行时权限APItypealias关键字可以用于给任意类型指定一个别名,如:typealias PermissionCallback = (Boolean, List<String>) -> Unit
Android开发高级技巧
全局获取context前提:或许目前你还没有为得不到Context而发愁过,因为我们很多的操作是在Activity中进行的,而Activity本身就是一个Context对象。但是,当应用程序的架构逐渐开始复杂起来的时候,很多逻辑代码将脱离Activity类,但此时你又恰恰需要使用Context,也许这个时候你就会感到有些伤脑筋了。解决:Android提供了一个Application类,每当应用程序启动的时候,系统就会自动将这个类进行初始化。而我们可以定制一个自己的Application类,以便于管理程序内一些全局的状态信息,比如全局Context。 123456789class MyApplication : Application() { companion object { lateinit var context: Context } override fun onCreate() { super.onCreate() context = applicationContext }} 这样我们就可...
Android(Jetpack)
JetpackJetpack是一个开发组件工具集,它的主要目的是帮助我们编写出更加简洁的代码,并简化我们的开发过程。Jetpack中的组件有一个特点,它们大部分不依赖于任何Android系统版本,这意味着这些组件通常是定义在AndroidX库当中的,并且拥有非常好的向下兼容性。 MVVM架构ViewModelViewModel是可以帮助Activity分担一部分工作,它是专门用于存放与界面相关的数据的。只要是界面上能看得到的数据,它的相关变量都应该存放在ViewModel中,而不是Activity中,这样可以在一定程度上减少Activity中的逻辑。ViewModel还有一个非常重要的特性。我们都知道,当手机发生横竖屏旋转的时候,Activity会被重新创建,同时存放在Activity中的数据也会丢失。而ViewModel的生命周期和Activity不同,它可以保证在手机屏幕发生旋转的时候不会被重新创建,只有当Activity退出的时候才会跟着Activity一起销毁。导入外部依赖:implementation "androidx.lifecycle:lifecycle...
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> <ite...
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 reade...
Android入门(Service的使用)
Serviceservice是android实现程序后台运行的解决方案。当然它并不是独立运行,而是依赖于应用程序,应用程序停止时,他也会一起停止。Service并不会自动开启线程,所有的代码都是默认运行在主线程当中的。 Android多线程编程 在kotlin中开启线程的方式更加简单。它为你定义了顶层方法thread{//方法体}直接在其中写内容,然后他会被拉起为一个新线程。 更新UI:和许多其他的GUI库一样,Android的UI也是线程不安全的。也就是说,如果想要更新应用程序里的UI元素,必须在主线程中进行,否则就会出现异常。 所以android提供了一套异步消息处理机制:解决了在子线程进行UI操作的问题1234567891011121314151617181920212223242526class MainActivity : AppCompatActivity() { val updateText = 1 val handle = object :Handler(Looper.getMainLooper()){ //...
Android入门(使用多媒体)
使用通知功能通知渠道:自Android8.0后引入的新概念。每个应用程序可以自由的创建当前应用应该拥有哪些通知渠道。而这些通知渠道的控制权掌握在用户手中。用户可以选择是否响铃、是否振动或者是否要关闭这个渠道的通知。对于应用而言,,通知渠道一旦创建就不可修改。所以一定要设计好有哪些渠道需要设计。 通知渠道的基本使用 首先需要一个NotificationManager对通知进行管理。可以通过调用Context的getSystemService()方法获取。这个方法接收一个参数用于确定获取系统的那个服务,如:val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager。Context.NOTIFICATION_SERVICE就是通知服务 构建通知渠道:使用NotificationChannel类构建一个通知渠道,并调用NotificationManager的createNotificationChannel()方法完成创建。由于这些类是在Android8.0后添加的,因此使用前要...
Android入门(ContentProvider)不同应用共享数据
ContentProvider主要用于在不同的应用程序之间实现数据共享的功能 运行时权限这是ContentProvider能否使用的基础.运行时权限的意义:在旧版android中,所有的权限都是在应用安装时会直接声明出来,如果你接受这些条件就安装。否则拒绝安装就可以了。而这就会导致一些店大欺客的问题。比如:旧版微信就会申请几乎所有的权限。而你如果不接受你就不能使用微信。 所以运行时权限就有了他存在的意义:应用会在需要使用该权限时才会像用户发起申请,即便用户拒绝了,也可以正常使用其他功能。当然,并不是所有权限都需要在运行时申请,对于用户来说,不停地授权也很烦琐。Android现在将常用的权限大致归成了两类,一类是普通权限,一类是危险权限。对于普通权限,系统会帮我们自动授权。而危险权限都交给用户决定。以下是Android到Android10版本所有的危险权限: 运行时权限申请样例: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555...
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 'org.xerial:sqlite-jdbc:3.41.2.2' 分别是bee的三个官方库和一个sqlite驱...