分类

Android

深入探讨 Android 系统的核心架构与高级开发,聚焦四大组件(Activity、Service、Broadcast Receiver、Content Provider)的原理、生命周期管理和交互机制。从基础的组件构建与通信,到 Android Framework 层(如 AMS、WMS、PMS)的源码剖析和自定义扩展,提供详尽代码示例、调试技巧和性能优化策略。涵盖 JNI、AIDL、Binde

共 356 篇文章

Android

自定义 RecyclerView 动画:手写 ItemAnimator 实现 Remove 飞出效果

自定义 RecyclerView 动画:手写 ItemAnimator 实现 Remove 飞出效果列表里删一条数据时,我们常常希望它"飞出去"、后面的项平滑上移填补空位——这正是 RecyclerView 的 ItemAnimator 负责的事。但很多人照着写会发现:要么完全没动画,要么被删项飞出时下方 item 瞬间跳上去、和飞出项重叠闪烁。问题不在动画本身,而在于没理解 ItemAnimat

196
Android

Android 状态栏、全屏与沉浸式状态栏详解

Android 状态栏、全屏与沉浸式状态栏详解在 Android UI 里,"状态栏""全屏""沉浸式"常被混为一谈,但它们其实是三件不同的事,API 也分新旧两套。很多同学的沉浸式状态栏"在低版本好好的、高版本突然失效",多半就是没分清概念、又用错了过时 API。本文先把概念辨清,再分别讲全屏、透明状态栏、状态栏配色、WindowInsets、沉浸式模式,最后给出 AndroidX 现代统一方案

178 1
SearchView小巧的搜索控件
Android

SearchView小巧的搜索控件

SearchView小巧的搜索控件应用一个重要的功能是提供搜索,可以自己结合EditText和Button完成一个输入搜索的功能模块。但是不用那么麻烦,Android已经为我们集成好了一个功能强大的空间SearchView,通常和ToolBar一起使用,放在Menu菜单中展示。1、Menu中定义SearchView从设计上来讲,最好一直显示在Toolbar上,showAsAction属性设定为"a

1.9k
Android

Android“包裹”:Bundle

Android“包裹”:BundleBundle是谷歌封装好的“包裹”,官方的定义就是:A mapping from String keys to various Parcelable values。1、Bundle介绍Bundle位于android.os包中,用来携带数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组

1.8k
Android

PendingIntent延迟意图

PendingIntent延迟意图PendingIntent一般用在Notification和桌面小挂件AppWidgetProvider的点击事件发生时传递的Intent意图。这里主要了解一下PendingIntent,至于具体使用场景参考另外两篇详细介绍。1、什么是PendingIntentPendingIntent谷歌官方文档的解释是“A description of an Intent a

1.7k
StateListDrawable:状态Drawable
Android

StateListDrawable:状态Drawable

StateListDrawable:状态Drawable控件处于不同的状态,如点击、释放、勾选、不可用等状态时设置不同的样式。在代码中可以通过条件判断去根据不同的状态进行判断再设置不同的属性,这样做太麻烦了。Android给我们的drawable提供了便捷的设置方式,就是自定义一个selector背景样式,给不同的状态属性设置对应的drawable资源。更多Drawable详见Android Dr

2.2k
ShapeDrawable:Android自定义背景
Android

ShapeDrawable:Android自定义背景

ShapeDrawable:Android自定义背景自定义背景样式shape,在res/drawable目录下。一般通过setBackground()设置成TextView、Button等控件的背景。让程序员也可以定义多种多样的背景。更多Drawable详见Android Drawable。1、shape自定义背景样式根标签<shape></shape>,形状shape有四种可以选择:rectan

2.0k 1
Android

Android通知Notification

Android通知Notification首先获取系统服务NotificationManager:1.1、通知渠道其次,对于Andrid 8.0 O以上的版本需要添加通知渠道(NotificationChannel)才能正常显示通知,创建一个NotificationChannel对象,并将其添加到NotificationManager中。后面创建Notification通知的时候需要指定通知渠道I

876
Android

信件:Message

信件:Message刚接触Android开发,子线程中进行数据处理完毕之后,如何将数据传到主线程让我困惑一段时间。那么如何将数据传到主线程呢?这需要借助Android的Handler传递消息机制,原理详见Handler、Looper、MessageQueue消息机制原理。1、获取Message通常在子线程中处理完毕,需要借助Message向主线程发送消息,通知主线程,1.1、直接创建构造函数直接创

1.7k
Android

看源码理解几种设置View背景的区别

看源码理解几种设置View背景的区别在写代码的时候给一个布局View设置背景,一开始使用的是setsetBackgroundResource()由于某种原因没有效果,换成setBackground()就可以了。很好奇,这其中的原理,虽然这些都是用来给View设置背景的,最大的不同无外乎参数不同:setBackground(Drawable background):其参数为一个Drawable对象,

2.4k
精选
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
Android

Activity四种启动模式

Activity四种启动模式启动模式android:launchMode在AndroidManifest.xml中配置,共有四种启动模式。Android开发者博主扔物线关于Activity的启动模式说的非常细! 1、standard:标准模式此模式为默认模式,android:launchMode="standard”可不写,默认为此模式。在标准模式下,每启动一个activity,系统则会创建一个相

1.9k
时间选择器:DatePicker和TimePicker
Android

时间选择器:DatePicker和TimePicker

时间选择器:DatePicker和TimePickerAndroid开发常常会遇到选择日期时间的场景,Google为我们提供了现成的系统公共控件调用。至于时间使用Java标准API即可获取想要的,可以参考Java日期:Date、Calendar及DateFormat格式化。1、日期选择器DatePickerDialog2、时间选择器:TimePickerDialog

1.6k
Detected problems with API compatibility...
Android

Detected problems with API compatibility...

由于反射调用了隐藏的API,在Android9.0运行APP的时候会出现弹框提醒:Detected problems with API compatibility(visit g.co/dev/appcompat for more info) “自 Android P 也就是 Android9.0开始,谷歌限制开发者调用非官方公开API(使用@hide注解的系统源码)以及废弃API(@Deprec

2.1k