- 博客(36)
- 收藏
- 关注
原创 安卓开发---BaseAdapter(定制ListView的界面)
BaseAdapter 是 Android 中最基础的适配器类,它是所有其他适配器(如 ArrayAdapter、SimpleAdapter)的父类。里面只有两个字段,name表示水果的名字,imageId表示水果对应图片的资源。2.自定义水果适配器FruitAdapter,继承自BaseAdapter。1.定义一个实体类Fruit,交互的数据类型就用这个实体类。定义数据表,存储Fruit类的数据。5.自定义适配器的固定动作。4.添加水果到列表的方法。
2025-08-29 19:48:18
61
原创 安卓开发---SimpleAdapter
告诉适配器,数据中的"image"键对应布局中的图片控件,"name"键对应布局中的文本控件。这样适配器就能自动完成数据到界面的绑定。//from数组中的每个元素都是一个字符串,对应数据集合中 Map 的键。//to数组中的每个元素都是一个视图 ID(整数类型),对应布局文件中的控件 ID。
2025-08-29 18:29:33
191
原创 安卓开发---ArrayAdapter
概念是 Android 中一个最简单的适配器,用于将数组或列表数据绑定到 UI 组件(如 ListView、Spinner)。方法签名上下文是为了提供应用环境信息,用于访问资源、数据库等。子项布局是定义每个列表项的显示样式,系统有自带简单的子项布局,比如:android.R.layout.simple_list_item_1数据源是指要显示的数据,数据类型为或String[]。优点:几行代码就能实现列表显示缺点:只适合显示简单文本,不支持复杂的数据绑定,大数据量时可能有效率问题。
2025-08-29 16:50:28
73
原创 安卓开发---BLE通信
9.点击设备连接的方法,连接设备前要先停止扫描,因为扫描非常耗电,最好永不循环扫描,并始终设置扫描时间限制。先检查是否已经连接了该设备,然后清理旧的连接资源,因为Android蓝牙API限制,一个设备只能有一个活跃的GATT连接。7.开始扫描,当相关权限获取完成就可以开始扫描,先通过BluetoothManager获取蓝牙适配器,再判断蓝牙是否开启和是否可用。2.定义UUID,根据自己UUID进行更改,服务UUID是为了让设备发现该服务,特征UUID是为了数据读写操作,描述符UUID是为了通知配置。
2025-08-28 19:39:48
799
原创 安卓开发---BluetoothGattCallback(GATT回调)
是 Android 蓝牙开发中最重要的回调类之一,它负责处理所有与 GATT (通用属性配置文件) 相关的操作结果和事件通知。主要有两大功能:1.:当你执行连接、发现服务、读写特征等操作后,通过回调返回操作结果。2.:当设备主动发送数据或状态变化时,通过回调通知应用。BluetoothGattCallback 中的常用方法和逻辑:1.功能:此方法会在蓝牙设备连接或断开连接时被调用。参数:gatt:与蓝牙设备的连接实例。
2025-08-27 18:55:01
545
原创 安卓开发--ConstraintLayout(约束布局)
是一个虚拟的视图容器,它可以将多个子视图合成一个图层,然后对这个图层进行统一的变换,比如旋转(rotation)、缩放(scale)、平移(translation)、透明度(alpha)等。Flow 可以自动调整其子视图的排列方式,支持水平或垂直方向的流式布局,特别适合处理元素数量不固定且布局复杂的场景。Flow 视图会根据子视图的数量和指定的方向(水平或垂直)自动排列其子视图,支持多行或多列布局。最大子视图数量:可以设置每行或每列显示的最大子视图数量,一旦达到最大数目,剩余的视图会自动换行或换列。
2025-08-04 14:45:42
883
原创 安卓开发--RelativeLayout(相对布局)
是 Android 中一种基于相对位置进行布局的容器,它允许子视图通过相对于父容器或其他子视图的位置关系来定位。与指定视图的基线对齐。
2025-08-01 21:02:22
284
原创 安卓开发--LinearLayout(线性布局)
center_vertical|center_horizontal|..."(所有子视图位于父容器位置)作用:控制子视图在父容器中的对齐方式,可以组合使用,如 center_vertical|right。:android:layout_weight="1" (写在线性布局下面的子项里面)作用:horizontal:水平排列(默认值)/vertical:垂直排列.作用:控制单个子视图在父容器中的对齐方式,不同于父容器的gravity属性。right|..."(单个子视图位于父容器位置)
2025-08-01 20:31:55
290
原创 安卓开发--RecyclerView的混合列表
功能:实现了横向滚动的RecyclerView中放入一个按钮,点击一下按钮RecyclerView就多一张图片,按钮始终在RecyclerView的右侧,在按钮的左侧加入新的图片。通过这个案例,来探讨其中的原理。
2025-07-31 14:55:19
745
原创 安卓开发--PopupView弹出视图
BottomSheetDialog:Material Design 风格的底部弹窗。PopupWindow:轻量级悬浮窗,可自定义布局。Dialog:系统级弹窗,自带生命周期管理。相对某个View下方显示。是否覆盖锚点View。
2025-07-26 16:47:27
171
原创 安卓开发--通知的点击功能实例
先在AndroidManifest.xml中添加权限,并且注册第二个activity。.setContentIntent(pi)//加点击跳转页面的功能。//创建跳转页面的意图。
2025-07-25 21:24:42
215
原创 安卓开发--通知Notification
先在AndroidManifest.xml里面添加权限。必须提供,显示在状态栏(纯白色,推荐使用矢量图)VISIBILITY_SECRET:完全不显示。Android 8.0+ 必须为通知分配渠道。VISIBILITY_PUBLIC:完全显示。可选,展开后显示(通常用于联系人头像)小图标 (Small Icon)大图标 (Large Icon)决定通知的显示位置和干扰程度。渠道 (Channel)构建兼容不同版本的通知。13.通知的可见性控制。状态栏显示+默认声音。
2025-07-25 20:14:59
247
原创 安卓开发--申请拨打电话的权限(CALL_PHONE)实例
2.给按钮添加打电话的点击事件--MainActivity.java。1.先在AndroidManifest.xml中添加权限。
2025-07-25 17:20:01
174
原创 安卓开发--照相机权限申请的实例
2.给按钮添加打开照相机的点击事件--MainActivity.java。1.先在AndroidManifest.xml中添加权限。
2025-07-25 17:01:23
166
原创 安卓开发--请求权限
(Normal):不影响用户隐私(如网络访问、振动控制),系统自动授予(Android 6.0+),只需要在AndroidManifest中声明即可,不需要动态申请;特性:同一权限组的权限只需要申请一次(如已授权 WRITE_EXTERNAL_STORAGE,则自动获得 READ_EXTERNAL_STORAGE)(Dangerous):涉及用户隐私(如相机、位置、通讯录),需要运行时申请(Android 6.0+);:仅相同签名的应用可共享(如自定义权限)三.运行时权限的处理(危险权限)
2025-07-25 16:41:42
371
原创 安卓开发--从照相机拍摄图片并显示到 ImageView的实例
先在AndroidManifest.xml中添加相关权限,和配置provider。在res/xml目录下新建file_paths.xml。3.生成一个临时图片文件。
2025-07-23 16:19:13
169
原创 安卓开发--RecyclerView实例_实现横向滚动
orientation="vertical".第二,把子项布局的宽改为100dp:android:layout_width="100dp".第三,把图片固定大小:android:layout_width="60dp" android:layout_height="60dp";全部代码如下(MainActivity.java & activity_main.xml & ltem_layout.xml & Fruit.java & FruitAdaptet.java)把线性布局管理器的方向改为水平。
2025-07-21 11:16:13
335
原创 安卓开发--RecycleView
方法三:实现RecyclerView的onItemTouchListener接口,通过GestureDetectorCompat类进行手势的拦截和响应,然后GestureDetectorCompat交给实现了OnGestureListener接口的SimpleOnGestureListenter实现,调用逻辑相对较为复杂。方法二(推荐):Adapter类自定义内部事件接口,定义事件处理的回调方法,参数为被点击item的位置;显示列表项的每个控件的信息:RecyclerView.ViewHolder。
2025-07-18 10:18:17
793
原创 安卓--SimpleDateFormat
升级到 DateTimeFormatter(Java 8+ / Android API 26+)。避免重复创建:对于频繁使用的格式,考虑缓存SimpleDateFormat实例。明确语言环境:总是明确指定语言环境,避免因用户设备设置导致意外行为。性能敏感场景:对于列表项等频繁调用的场景,考虑重用格式化器实例。// 仅适用于 Android 8.0+(API 26+)parse()将 String→ Date(需捕获异常)// 创建默认语言环境的格式化器。// 创建指定语言环境的格式化器。
2025-07-16 14:42:59
522
原创 安卓开发--活动
这个方法在活动完全不可见的时候调用;如果启动新活动是一个对话框式的活动,onPause()方法会得到执行,onStop()方法不执行。:这个方法在系统准备去启动或者恢复另一个活动的时候调用。:它在活动第一次被创建的时候调用,我们应该在这个方法中完成活动的初始化操作,如加载布局,绑定事件等。:这个方法在活动准备好和用户进行交互的时候调用,此时活动一定位于返回栈的栈顶,并且处于运行状态。:这个方法在活动由停止状态变为运行状态之前调用,活动被重新启动。:这个方法在活动由不可见变为可见的时候调用。
2025-07-08 15:08:51
188
原创 安卓开发--日志工具的使用
/ 5种日志级别(优先级从低到高)Log.v("TAG", "Verbose - 最详细的日志");// VERBOSELog.d("TAG", "Debug - 调试信息");// DEBUGLog.i("TAG", "Info - 重要信息");// INFOLog.w("TAG", "Warn - 警告信息");// WARNLog.e("TAG", "Error - 错误信息");
2025-07-08 14:17:55
302
原创 安卓开发--广播实例:实现强制下线功能
强制下线功能的实现:在界面上弹出一个对话框,让用户无法进行任何操作,必须要点击对话框中的确定按钮,关闭所有的活动,然后回到登录界面(借助广播实现该功能)。调用ActivityCollector.finishAll()关闭所有Activity。ActivityCollector.java(管理所有活动)由于所有其他Activity已被销毁,用户只能看到登录页面。LoginActivity.java(登录页面)弹出模态对话框(无法通过Back键取消)清理Activity栈。强制下线的完整流程。
2025-07-08 11:15:10
201
原创 安卓开发--广播
它遵循发布-订阅模式,发送者发送广播,接收者接收并处理广播。广播类型:标准广播(接收者同时接受,无法被截断),有序广播(接收者按优先级接受,可被截断,可被修改),本地广播(应用内部传递)完全异步:所有接收器(BroadcastReceiver)几乎同时收到广播,无先后顺序。不可截断:无法通过代码终止广播的传播(与有序广播的 abortBroadcast() 不同)。ACTION_AIRPLANE_MODE_CHANGED - 飞行模式变化。广播的分类:系统广播,应用自定义广播,本地广播。
2025-07-07 20:09:42
686
原创 安卓开发-使用动态注册的广播接收器接受本地广播(使用LocalBroadcastManager)
【代码】安卓开发-使用动态注册的广播接收器接受本地广播(使用LocalBroadcastManager)
2025-07-07 19:58:56
227
原创 安卓开发-运用动态注册的广播接收器,接收标准广播的实例
(代码中注册):灵活可控,可根据运行时条件注册 / 注销,适用于需要与 Activity 生命周期绑定的场景(如本示例)。(Manifest 中注册):全局可用,但在 Android 8.0 + 对隐式广播有限制,需通过。注销,确保接收器与 Activity 生命周期同步,避免内存泄漏。触发sendCustomBroadcast(),发送隐式广播。onDestroy()中注销接收器,释放资源。,确保广播仅在应用内部流通,提升安全性。onCreate()中注册广播接收器。动态注册隐式广播接收器时,必须通过。
2025-07-05 20:33:28
205
原创 安卓开发-运用静态注册的广播接收器,接收标准广播的实例
有序广播:使用sendOrderedBroadcast()可以发送有序广播,接收器按优先级顺序接收。本地广播:如果广播不需要跨应用,可以使用 LocalBroadcastManager 提高安全性。动态注册:如果使用registerReceiver()动态注册接收器,则可以接收隐式广播。系统接收到广播后,根据 Intent 中的 ComponentName 查找目标组件。静态注册的接收器(Manifest 中声明的)无法接收大多数隐式广播。在onReceive()中通过 Action 过滤并处理广播。
2025-07-05 19:51:25
234
原创 BluetoothAdapter(经典蓝牙部分)
用于获取 Bluetooth Profile 的代理对象,从而可以访问和管理不同的蓝牙协议(如 A2DP、HFP 等)的功能。在使用蓝牙之前,需要确认设备是否支持蓝牙,并且蓝牙是否已经开启。概念:Android蓝牙开发的核心类,它代表了设备的蓝牙适配器,允许执行基本的蓝牙操作,如发现设备,查询已配对的设备,创建蓝牙socket等。在使用相应的功能前,需要事先声明相关的蓝牙权限。状态常量:STATE_OFF,STATE_TURNING_OFF,STATE_ON,STATE_TURNING_ON;
2025-07-04 20:18:23
946
原创 安卓开发---Intent
application/vnd.openxmlformats-officedocument.wordprocessingml.document:Word Open XML 文档。application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:Excel Open XML 表格。application/vnd.ms-excel:Excel 表格。application/xml:XML 数据。application/*:匹配任何应用类型。
2025-06-22 13:33:51
500
原创 安卓开发---menu
这是应用的主菜单,可通过设备上的菜单按钮或者点击工具栏的溢出图标来打开。选项菜单通常借助设备的菜单按钮或者应用栏(App Bar)上的溢出图标(三个点)来开启。①注册上下文菜单:调用 registerForContextMenu(view) 方法。:长按视图时弹出的菜单,类似于右键菜单。①定义菜单资源:在 res/menu/ 目录下创建 XML 文件,以此定义菜单项。②创建上下文菜单:重写 onCreateContextMenu() 方法。③显示菜单:调用 show() 方法。
2025-06-21 23:53:05
432
原创 安卓开发---Toast
Toast.LENGTH_SHORT:持续时间(约 2 秒)或LENGTH_LONG(约 3.5 秒)#context:上下文(如 Activity 或 Application)#最后两个参数x、y 方向的偏移量(像素)
2025-06-21 23:35:29
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人