
StateListDrawable:状态Drawable
StateListDrawable:状态Drawable控件处于不同的状态,如点击、释放、勾选、不可用等状态时设置不同的样式。在代码中可以通过条件判断去根据不同的状态进行判断再设置不同的属性,这样做太麻烦了。Android给我们的drawable提供了便捷的设置方式,就是自定义一个selector背景样式,给不同的状态属性设置对应的drawable资源。更多Drawable详见Android Dr
2026年以前手搓博客一千多篇。如今 Claw、Cursor、Claude 等 AI Agent 横空出世。只需一句话,AI 就能生成文章、调整格式、润色语言,并一键自动发布。欢迎来到 AI 驱动博客时代 🚀

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

ShapeDrawable:Android自定义背景自定义背景样式shape,在res/drawable目录下。一般通过setBackground()设置成TextView、Button等控件的背景。让程序员也可以定义多种多样的背景。更多Drawable详见Android Drawable。1、shape自定义背景样式根标签<shape></shape>,形状shape有四种可以选择:rectan
Android通知Notification首先获取系统服务NotificationManager:1.1、通知渠道其次,对于Andrid 8.0 O以上的版本需要添加通知渠道(NotificationChannel)才能正常显示通知,创建一个NotificationChannel对象,并将其添加到NotificationManager中。后面创建Notification通知的时候需要指定通知渠道I

String、StringBuilder和StringBuffer1、StringString内容是不可变的字符,String底层使用了一个不可变的字符数组(final char[])String进行拼接 :String 定义的字符串保存在常量池里面,进行+操作时不能直接在原有基础上拼接。每次+操作 : 隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法
信件:Message刚接触Android开发,子线程中进行数据处理完毕之后,如何将数据传到主线程让我困惑一段时间。那么如何将数据传到主线程呢?这需要借助Android的Handler传递消息机制,原理详见Handler、Looper、MessageQueue消息机制原理。1、获取Message通常在子线程中处理完毕,需要借助Message向主线程发送消息,通知主线程,1.1、直接创建构造函数直接创
看源码理解几种设置View背景的区别在写代码的时候给一个布局View设置背景,一开始使用的是setsetBackgroundResource()由于某种原因没有效果,换成setBackground()就可以了。很好奇,这其中的原理,虽然这些都是用来给View设置背景的,最大的不同无外乎参数不同:setBackground(Drawable background):其参数为一个Drawable对象,
ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage
Java四种引用类型每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。在 Java 中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。在 JDK1.2 之前,Java中的定义很传统:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称为这块内存代表着一个引用。Ja
Android各版本对应的SDK版本平台版本SDK版本版本名称17.0Cinnamon BunAndroid 1716.0BaklavaAndroid 1615.0V(VanillalceCream)Android 15 (Android V)14.0U(UpsideDownCake)Android 14 (Android U)13.0T(33)Android 13 (Android Tirami
Activity四种启动模式启动模式android:launchMode在AndroidManifest.xml中配置,共有四种启动模式。Android开发者博主扔物线关于Activity的启动模式说的非常细! 1、standard:标准模式此模式为默认模式,android:launchMode="standard”可不写,默认为此模式。在标准模式下,每启动一个activity,系统则会创建一个相

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

由于反射调用了隐藏的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
View的四个构造函数一般自定义View,都需要继承View或者View的某个子类,必须要实现几个参数不同的构造方法:第一个View(Context context),一般用于在代码中直接声明自定义View的时候使用第二个构造函数View(Context context, @Nullable AttributeSet attrs)是在布局中使用自定义的View是系统会自动调用,生成自定义View实

最最最常用的控件:TextView1、TextView常用属性:2、TextView跑马灯布局文件中TextView的几个重要属性都要设置写好上面的布局就可以实现简单的跑马灯,但是实际布局不肯能这么简单,会很复杂有各种控件,TextView可能不只一个还会有EditText占用焦点。跑马灯只有TextView获取焦点的时候才有效果。如果没有获取焦点就像下面的第二行TextView,虽然设置了跑马灯

another git process seems to be running in this repository1、问题操作git准备撤回工作区中已修改的文件内容。提示操作失败:2、解决进入到隐藏的.git文件夹下:删除这个index.lock文件3、原因引起是因为在git执行一个命令的时候直接ctrl+d,强行终止了。导致git命令没有完成,意外终止而导致。参考博客: Git操作失败并提示A

simpleUML:UML类图生成插件类图对于理解设计,开发过程中输出一些必要的设计文档很重要。手动用visio画UML类图比较慢,可以借助工具一键生成UML类图。1、安装插件设置中Plugins搜索simpleUML安装,重启IED。2、生成类图安装好之后就可以直接使用了。①右键需要添加生成类图的类或者整个包:②注意左侧工具类可以选择显示的类图关系,生成的UML图默认只有聚合类型的线条,可选中一
Android ScrollView 顶部下拉与底部上拉回弹效果实现ScrollView 滑到顶部或底部时,默认是"硬边界"——戛然而止,没有 iOS 那种顺滑的橡皮筋回弹手感。要让 Android 的 ScrollView 也具备这种效果,需要自定义控件在触摸事件里做干预。本文实现一个 ReboundScrollView:在 dispatchTouchEvent 中判断是否到达顶部/底部,到达后

LeakCanary导致编译冲突问题坑点:在比较旧的项目build.gradle文件中添加LeakCanary依赖准备分析内存泄露,可以sync,但是build的时候直接报错不通过:解决办法就是移除引入库中的额外重复依赖:或者降低到低版本的,没有这个问题:技巧:在代码项目路径下,运行命令检查依赖项:会检测出依赖关系: