- 博客(29)
- 收藏
- 关注
原创 安卓开发之模块化、组件化设计
/ 执行跳转 } });if (rootProject.ext.isModule) { apply plugin: 'com.android.application' //指定为独立运行的应用 } else { apply plugin: 'com.android.library' //库 } defaultConfig { if (rootProject.ext.isModule) { applicationId "com.ls.fuser"//如果独立运行 需要提供applicationId } }
2025-03-27 20:37:44
576
原创 安卓开发之LiveData与DataBinding
/这里的this 指的就是生命周期所有者,LiveData会检查当前的生命周期变化,只有在活跃状态下才会通知 liveData.observe(this, new Observer<String>() { @Override public void onChanged(String data) { // 数据变化时更新 UI textView.setText(data);LiveData 是不可变的,而 MutableLiveData 是可变的,通常通过 MutableLiveData 来更新数据。
2025-03-26 17:13:26
775
原创 安卓自定义View
为什么需要自定义 View?Android 提供了很多常用的 View,比如 TextView、Button、ImageView 等,但是有些场景下,这些系统提供的控件无法满足某些特定需求。比如:一些特殊的图表、微信的发语音按钮、发短信的倒计时按钮、需要特殊手势控制的常见。这时候,我们就可以创建自己的自定义View,以此满足特定的需求。自定义 View 的分类在 Android 中,自定义 View 主要分为以下三种:选择自定义 View 的类型取决于 需求的复杂程度 和 功能实现的场景。扩展控件只需要增强
2025-03-21 17:33:07
521
原创 安卓开发之动画效果
/ 缩放动画 ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, // 起始X轴缩放比例 2.0f, // 结束X轴缩放比例 1.0f, // 起始Y轴缩放比例 2.0f, // 结束Y轴缩放比例 Animation.RELATIVE_TO_SELF, 0.5f, // 缩放中心点X轴,相对于视图自身的50%位置 Animation.RELATIVE_TO_SELF, 0.5f // 缩放中心点Y轴,相对于视图自身的50%位置 );
2025-03-11 21:49:04
673
原创 安卓开发之通知栏
服务服务也是四大组件之一,用于执行长时间运行操作的组件,它与用户界面(UI)是分开的,因此即使用户切换到其他应用,服务依然可以继续运行。主要用于处理一些不需要用户交互的任务。例如,播放音乐、下载文件、处理网络请求等。服务可以在整个应用生命周期中运行,直到被显式停止或应用进程被终止。服务的3种类型Service 可以分为三种类型:前台服务(Foreground Service)、后台启动式服务(Background Service)和绑定服务(Bound Service)。每种服务有其特定的使用场景和生命周期
2025-03-06 18:34:31
869
原创 安卓应用之服务
服务服务也是四大组件之一,用于执行长时间运行操作的组件,它与用户界面(UI)是分开的,因此即使用户切换到其他应用,服务依然可以继续运行。主要用于处理一些不需要用户交互的任务。例如,播放音乐、下载文件、处理网络请求等。服务可以在整个应用生命周期中运行,直到被显式停止或应用进程被终止。服务的3种类型Service 可以分为三种类型:前台服务(Foreground Service)、后台启动式服务(Background Service)和绑定服务(Bound Service)。每种服务有其特定的使用场景和生命周期
2025-03-06 18:29:36
588
原创 安卓广播的使用
/自定义广播注册接收器,需要在第三个参数指定是否允许外部APP进程触发: //RECEIVER_EXPORTED表示允许 RECEIVER_NOT_EXPORTED表示不允许 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { registerReceiver(statusReceiver, new IntentFilter("com.ls.test.loginstatus"), Context.RECEIVER_EXPORTED);
2025-03-04 15:32:44
522
原创 安卓开发相机功能
相机功能安卓中的相机调用功能也经历了很多的方案升级,目前可选的官方方案是CameraX、Camera2、Camera(废弃),还有一些第三方免费或者是付费的相机库。对于大多数开发者,建议使用 CameraX。CameraXCameraX 是 Android Jetpack 库的一部分,旨在简化相机应用的开发。它构建在 Camera2 API 之上,为开发者提供了更简洁的接口,相比于Camera和Camera2,有更好的设备兼容性。CameraX拍照在 build.gradle 文件中添加 CameraX 相
2025-03-02 18:05:10
801
原创 Android四大组件——Content Providers
// 删除数据的方法 @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // 检查URI是否匹配 if (uriMatcher.match(uri) == URI_MATCH_CODE) { // 删除表中符合条件的数据,返回受影响的行数 return database.delete(TABLE_NAME, selection, selectionArgs);假设我们有两个应用:A和B。
2025-02-28 14:03:59
805
原创 ROOM的使用步骤
/更新,这里没有自定义sql语句,但是Room会根据User中的主键来找到对应的数据 @Update void updateUser(User user);//如果不想通过实体类更新数据,而是通过具体的参数,那可以自行定义复杂的sql语句 @Query("UPDATE user SET age = :age WHERE uid = :uid") void updateUserAge(int uid, int age);首先,我们需要定义数据库中的表,这通过 Entity 注解来实现。
2025-02-25 16:05:41
936
原创 安卓线程间通信
HandlerHandler 是 Android 提供的用于线程间通信的工具,主要用于在主线程(UI线程)和其他线程之间传递消息和执行任务。它通过消息队列(MessageQueue)和 Looper 机制(轮询机制),实现线程间通信。Handler 可以在一个线程中发送和处理消息,从而在不同的线程之间传递数据或执行任务。Handler使用//在主线程中创建 Handler,并指定与主线程关联的 Looper。 Handler handler = new Handler(Looper.getMainLoope
2025-02-23 18:14:21
754
原创 安卓开发两种网络连接方式
/指定请求头中的Accept。.addHeader("Accept", "application/json")//为这个请求单独添加请求头。//循环读取服务器返回的数据,直到 reader.readLine() 返回 null,表示数据读取完毕。//注意,okhttp的onFailure、onResponse都是在子线程,如果需要更新UI,需要回到主线程。//// 允许向连接输出数据。
2025-01-15 17:47:51
624
原创 安卓四大组件-Activity
Activity在被创建到销毁的过程中,会有各种状态的切换,Activity类针对于这些状态,提供了对应的回调方法。如果因配置变更而调用 onDestroy(),系统会立即创建一个新的 activity 实例,然后在新配置中对该新实例调用 onCreate()。这些状态发生后,activity 会进入“已暂停”状态,系统会调用 onPause() 回调。销毁时,系统会调用onPause()、onStop()、onDestroy()等生命周期方法,随后再次调用onCreate()来创建新的Activity。
2024-11-18 15:08:45
403
原创 安卓ui基础三
通常我们都是使用layout_width、layout_height两个属性来指定一个控件的大小,我们可以把宽高设置成warp_content、match_parent,或者是某个固定的尺寸。在Java代码中使用控件时,控件不能决定本身在布局中的行为,所以这时候需要使用LayoutParams,不同的父布局,需要获取不同的LayoutParams,比如控件的父布局是LinearLayout,那么就要获取LinearLayout.LayoutParams。我又看到了你在打游戏了,为什么不好好学习?
2024-10-29 23:46:16
435
原创 安卓ui基础2
如果原图的尺寸小于 ImageView 的尺寸,那么原图会居中显在 ImageView 中,而 ImageView 的剩余部分则会显示为空白。f.centerCrop:按比例扩大图片的尺寸,使得图片的长或宽等于或大于ImageView的对应尺寸,然后裁剪掉图片的多余部分,居中显示在ImageView中。所以不需要刻意记,用第一个就可以。在计算机中有几种常见的图片类型:jpg、png、svg、webp等等,在安卓中,我们可以使用ImageView来显示它们,其中也会有一些特殊场景需求下会使用到的图片形式。
2024-10-22 16:35:03
357
原创 安卓ui基础一
2.View还有一个叫做ViewGroup的子类,ViewGroup更多的时候是一个看不见的容器,可以用来存放其他控件或者布局。c.具体的尺寸值:填写固定的尺寸值,安卓中提供了像素(px)、英寸(in)、毫米(mm)、点(pt)、可缩放像素(sp)、密度无关像素(dp或者dip),我们经常使用dp或者px来定义控件的宽高,也可以根据实际需要来选择。布局文件使用.xml扩展名的形式保存在项目的res/layout文件夹下面,在Java中通过R.layout.文件名的形式引用。
2024-10-19 21:52:58
656
原创 IDEA一些常用操作
在需要断点的代码行号边上点击,可以打上一个红色的断点,表示代码执行到这个地方需要停下来,等我们操作。代码会停在断点位置,并且弹出断点调试的观察页面,等待我们操作。点击断点运行按钮,代码开始运行。
2024-10-13 16:06:47
302
原创 文件的读写
每一个程序都需要输入和输出功能,除了面向控制台的输入、输出,Java还提供了面向与本地文件的读写操作。这个过程就是借助FileOutputStream,把内存当中hello里的内容输出到文件。读取的操作实际上就是借助FileInputStream,把文件读取到程序的内存当中。
2024-10-12 23:15:36
161
原创 JAVA异常
在程序当中,经常会出现一些异常与错误,Java为了我们能够更好的处理异常,也提供了异常处理机制,这可以让代码变得更加健壮:检查型异常和运行时异常运行时异常不会强制要求使用try catch捕捉,也不强制要求需要throws 检查型异常要求需要try catch,也要求throws
2024-10-12 19:00:57
1374
原创 JAVA内部类
定义在另一个类内部的类,称为内部类。内部类可以访问外部类的所有成员(包括私有成员),而外部类不能直接访问内部类的私有成员,只能通过内部类的对象来访问。
2024-10-12 14:51:05
166
原创 java继承多态与重写
继承是面向对象里面很重要的概念,继承允许我们创建分等级层次的类。被继承的类叫做父类,使用extends的叫做子类。我们通常可以把很多重复的属性、方法放到一个父类当中,让子类继承父类的能力,可以提升代码的维护性、扩展性。Java支持多层级继承,比如 LaoSun 继承了 Student,Student继承了People;如果父类和子类的属性、方法冲突,子类会去找离他最近的那个属性或者方法。子类可以拥有父类的非private方法和属性。
2024-10-11 12:48:45
371
1
原创 容器,以及一些常用容器的使用
用来存放一串数据的东西可以被称为容器,java中除了数组,还有其他对象类型的容器。我们可以根据应用场景来选择合适的容器。
2024-10-11 12:41:34
235
原创 静态变量、静态方法,(类变量、类方法)
static修饰过的成员变量或者成员方法,就叫静态变量(类变量)、静态方法(类方法),因为他是属于类本身的,而不是属于任何一个被实例的对象:
2024-10-11 12:38:49
165
原创 构造方法,包,以及权限修饰符
构造方法(也称为构造函数)是一种特殊类型的方法,用于初始化新创建的对象。构造方法的名字必须与类名完全相同,并且不能有返回类型(甚至不能是void)。类似于文件夹,使用包来管理代码、存放代码,可以提升代码可读性、维护性。
2024-10-11 12:38:03
279
原创 本地变量的定义
方法每次被调用,计算机都会为它分配一片独立的内存区域,作用域只在这个方法里面,里面的变量,称为本地变量。不同作用域的本地变量,可以重名,不冲突。但是一个大括号里面的下一级出现同名就会出现冲突。本地变量不会被自动初始化,但是在使用前必须被初始化。参数列表、方法里新定义的都是本地变量;
2024-10-11 12:35:35
172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人