Android开发
文章平均质量分 68
阿华-vitor
不断超越自我,快乐生活!
展开
-
Toast实现原理分析
Toast2 // ...6 // ...7}Toast通过静态方法makeText来创建实例。Toast的显示和隐藏是通过来管理的。Toast的视图是通过来创建的。Toast的视图添加到了中,并且设置了特定的参数,如位置和透明度。Toast的显示时间是通过Handler来控制的。原创 2024-08-22 22:04:23 · 392 阅读 · 0 评论 -
Dialog实现原理分析
是一个继承自Dialog的类,而Dialog又继承自Window,这使得可以作为一个独立的窗口出现在屏幕上。2 // ...3}通过来构建和配置。对话框的布局是由系统提供的 XML 布局文件定义的。支持多种按钮类型,如,它们可以设置点击监听器。可以自定义主题和样式。原创 2024-08-22 22:00:45 · 351 阅读 · 0 评论 -
Switch实现原理分析
Switch2 // ...3}Switchtrack(轨道)和thumb(滑块)。当状态改变时,thumb的位置也会相应改变,从而模拟开关的效果。Switch还提供了对触摸事件的支持以及事件监听器来响应状态的变化。原创 2024-07-29 22:49:18 · 319 阅读 · 0 评论 -
CheckBox实现原理分析
CheckBox2 // ...3}CheckBox继承自,因此它具备的所有功能,并且可以显示文本和图标。CheckBox的实现基于,它继承自Button。CheckBox主要通过设置按钮图标和监听选中状态的变化来实现其功能。它还支持通过自定义属性来自定义样式,并且可以通过事件监听器来响应状态的变化。原创 2024-07-29 22:45:14 · 286 阅读 · 0 评论 -
PrgogressBar实现原理分析
是一个自定义的View,它继承自View并实现了接口。2 // ...3}的实现基于View,并使用Drawable对象来绘制进度条。它支持确定性和不确定性两种模式,分别通过和来实现。通过设置进度和最大值,可以动态地更新进度条的状态,并且支持动画效果。原创 2024-07-28 22:26:11 · 436 阅读 · 0 评论 -
EditText实现原理分析
EditText2 // ...3}可以看到EditText实现了多个接口,包括(文本变化监听器)、(编辑动作监听器)、(焦点变化监听器)等。EditText支持通过 XML 属性来自定义样式,如提示文本、背景颜色等。1<EditTextEditText的实现基于TextView,但它添加了许多与文本编辑相关的功能,如光标管理、文本变化监听、编辑动作监听等。它还提供了剪切、复制、粘贴等常用编辑功能,并支持与输入法的交互。如果你想要深入研究EditText。原创 2024-07-27 22:22:22 · 460 阅读 · 0 评论 -
NestedScrollVew实现原理分析
继承自ScrollView,因此它也只接受一个直接子视图。与ScrollView不同的是,它支持嵌套滚动,这意味着它可以在内部滚动时允许其子视图也进行滚动。23 // ...45 // 构造函数9 }1014 }1519 }2022 // 初始化操作// 填充整个视口// 可聚焦// 子视图优先获得焦点26 }2728 // 其他方法...29}的实现原理与ScrollView类似,但是它增加了对嵌套滚动的支持。原创 2024-07-27 22:13:16 · 639 阅读 · 0 评论 -
ViewPager实现原理分析
ViewPager继承自,这决定了它的滑动方向是水平的。245 // 页面适配器78 // 当前选中的页面索引1011 // 子视图的容器1314 // 页面变化监听器1617 // 页面滚动监听器1920 // 构造函数23 }2427 // 初始化操作28 init();29 }3032 // 设置滚动条为不可见34 // 设置不可缓存36 // 设置滚动监听器38 }3940 // 设置适配器42 // 清除之前的适配器。原创 2024-07-24 23:01:28 · 363 阅读 · 0 评论 -
Button实现原理分析
Button是一个简单的控件,它的主要职责是处理用户点击事件,并且可以显示文本。它继承自TextView,这意味着它可以像TextView一样显示文本,并且可以设置各种文本相关的属性(如字体大小、颜色等)。2467 // 构造函数10 }1114 }151920 // 读取默认样式22 // 使用默认样式2526 // 设置点击监听器28 }2933 }3436 // 如果没有指定背景,使用默认的背景资源39 }41 }42。原创 2024-07-24 22:56:49 · 311 阅读 · 0 评论 -
ImageView实现原理分析
ImageView的实现涉及到构造、图片资源的加载和管理、缩放类型的设置、测量与布局逻辑以及图片的绘制。这些功能的实现确保了ImageView可以灵活地显示不同类型的图片资源,并能适应不同的布局需求。原创 2024-07-22 22:24:58 · 961 阅读 · 0 评论 -
TextView实现原理分析
TextView的实现原理涉及文本渲染、布局计算、测量、绘制和滚动等多个环节。它通过Paint和Layout对象来处理文本的视觉呈现,通过onMeasure和onLayout方法来处理大小和位置的计算,以及通过和滚动相关的方法来处理用户交互。这些机制共同协作,使得TextView成为 Android 应用中显示文本的强大工具。原创 2024-07-22 22:21:51 · 521 阅读 · 0 评论 -
RelativeLayout实现原理
的实现原理涉及到测量所有子视图,然后根据它们之间的相对位置规则来确定每个子视图的最终位置。这个过程需要仔细解析每个子视图的对象中的规则,并将这些规则应用于子视图的测量和布局过程。通过这种方式,能够灵活地组织子视图,并提供丰富的布局选项。原创 2024-07-18 22:48:51 · 376 阅读 · 0 评论 -
FrameLayout实现原理分析
的实现相对简单,它主要负责将子视图按照添加顺序堆叠在一起,后添加的子视图会覆盖先前的子视图。在测量和布局过程中,依赖于子视图自身的测量逻辑和中定义的属性来确定子视图的最终位置和大小。原创 2024-07-18 22:45:46 · 544 阅读 · 0 评论 -
LinearLayout实现原理分析
的实现原理主要集中在如何测量和布局其子视图,以满足指定的布局方向和权重响应。通过理解和onLayout()方法,以及子视图测量规格的生成,可以更好地掌握的内部工作原理。原创 2024-07-17 21:18:35 · 946 阅读 · 0 评论 -
Android 14新特性:选择性照片和视频访问授权
Android 14 引入了选择性照片和视频访问授权的新特性,这是一项旨在增强用户隐私和数据安全的重要更新。在之前的 Android 版本中,应用程序请求访问设备上的照片和视频时,通常会要求完全访问权限,这意味着应用可以访问用户图库中的所有照片和视频。然而,这种全盘访问可能不是所有用户都乐意给予的,特别是对于那些只需要访问特定照片或视频的应用。原创 2024-07-17 21:07:54 · 2782 阅读 · 0 评论 -
GreenDao实现原理
接下来,定义User实体类,使用 GreenDao 的注解进行标注:Java267@Entity1317 }1821 }2225 }2629 }3033 }3437 }3841 }4248 }4952 }53}原创 2024-07-15 21:52:53 · 1011 阅读 · 0 评论 -
dagger2实现原理
首先,我们定义 AppComponent 和 AppModule。Java6}79@Module15 }16}这里,@Component注解定义了一个组件,并指定了模块。@Module注解定义了一个模块,@Provides注解则指定了如何提供 MyService 实例。原创 2024-07-15 21:47:10 · 1053 阅读 · 0 评论 -
retrofit实现原理
开发者需要定义一个接口,其中包含带有注解的方法,比如。原创 2024-07-11 23:21:30 · 525 阅读 · 0 评论 -
Okhttp实现原理
OkHttp是一个高效的 HTTP 客户端库,广泛应用于 Android 和 Java 应用中。它提供了简洁的 API,支持多种协议,如 HTTP/1.x 和 HTTP/2,并且内置了缓存和重试机制。下面是结合源码分析的OkHttp。原创 2024-07-11 23:16:07 · 1593 阅读 · 0 评论 -
Rxjava实现原理
RxJava(Reactive Extensions for Java)是一个响应式编程库,它提供了一种声明式的异步数据流编程模型,基于观察者模式和响应式编程原则。RxJava允许开发者以声明式的方式编写非阻塞的、异步的数据处理代码,非常适合处理事件流、网络请求、数据库操作等场景。下面是RxJava。原创 2024-07-10 21:05:01 · 650 阅读 · 0 评论 -
EventBus原理分析
EventBus是一个流行的事件发布/订阅框架,主要用于简化 Android 应用中不同组件之间的通信。它的设计基于观察者模式,可以有效地减少组件间的耦合性,使得代码更加模块化和可维护。下面是EventBus。原创 2024-07-10 21:01:07 · 807 阅读 · 0 评论 -
自定义万能对话框
对话框在项目中是必不可少的,不想用系统的?那就只能自定义一个了。 1.功能:支持自定义动画效果,底部弹出,动态改变控件的文本内容及图标 2.使用: mAlertDialog=new AlertDialog.Builder(this).setContentView(R.layout.dialog_test) // .from原创 2017-08-15 16:10:01 · 342 阅读 · 0 评论 -
防止用户快速点击方案
测试人员突然跑过来跟我讲,快速点击按钮时,一直在发送请求,这样浪费用户流量。我心想,这都让你发现了?瞧他那眼神,似乎在说:小样,哥会看后台日志,想忽悠我,没门!我擦,看来不能偷这个懒了,那就解决吧!方法也挺多,我就说下我的方法: public class NoFastClickUtils { private static long lastClickTime = 0;//原创 2017-08-15 15:42:43 · 400 阅读 · 0 评论 -
实现一个简单的计时器
项目开发过程中经常会遇到这样的需求:让用户输入手机号,点击获取验证码,然后开始倒计时。所以就写了一个简单的计时器。1.先看效果: 2.实现思路:定义一个类CountDownTimerImpl继承自CountDownTimer类, 重写父类的onTick()与onFinish()方法,分别表示开始计时与计时结束。开始计时 改变控件状 态,计时结束恢复原创 2017-08-16 15:08:26 · 685 阅读 · 0 评论 -
App版本更新兼容7.0
最近在做App版本更新这块的功能,以前也做过,为节省时间,提高开发效率,第一反应就是把之前的代码找出来直接用。三下五除二就搞定了,直接打个包给到测试!果然,一切都太顺利了,只见测试胸有成竹的走过来,说道:你这个版本更新有问题,没法安装!心里咯噔一下,怎么可能,我自己都测试OK的!立马反应过来,那估计是系统问题吧,后来确认,人家测试直接用的7.0的手机测试的。唉,好吧,那就改呗! 1原创 2017-08-15 17:17:50 · 843 阅读 · 0 评论 -
工作中遇到关于WebView的效果
对在项目中使用到的WebView做个整理,主要涉及加载进度条、下位效果、及加载html字符串。 1.加载页面,比较常见的是加载一个链接,我在项目里是要加载html,直接上代码: (1)加载链接,比较简单,一行代码就ok: mWebview.loadUrl(content);(2)加载html String encoding =原创 2017-08-15 15:16:00 · 302 阅读 · 0 评论 -
Android机型适配
一、简介1.Android平台现状:碎片化严重:设备繁多、品牌众多、版本各异,芯片、摄像头、分辨率不统一等等。为了保证app在大多数Android设备上有良好的显示的效果就必须要对机型进行适配。2.适配思路:(1)语言适配(2)屏幕适配(尺寸、方向切换)(3)版本适配(SDK版本)二、基本概念介绍1.屏幕尺寸屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英原创 2017-08-25 14:33:44 · 1122 阅读 · 0 评论 -
WebView跳转H5页面后无法交互问题
开发中遇到跳转H5页面后,点击H5页面没有反应,进行如下设置即可: private void setWebVew(WebView webView) { WebSettings settings = webView.getSettings();//获得浏览器设置 settings.setJavaScriptEnabled(true); //支持js原创 2017-09-16 16:24:07 · 2786 阅读 · 0 评论 -
SwipeRefreshLayout下拉刷新与下拉控件冲突解决
1.SwipeRefreshLayout与ExpandableListView下拉冲突解决:expandableListView.setOnScrollListener(new XExpandListView.OnXScrollListener() { @Override public void onXScrolling(View view) {原创 2017-12-15 15:18:21 · 949 阅读 · 0 评论 -
Android开发常用框架
1.设置状态栏颜色:(1)status-bar-compat:地址:https://github.com/msdx/status-bar-compat2.时间选择器:(1)TimePickerDialog地址:https://github.com/JZXiang/TimePickerDialog3.动态权限:(1)easypermissions地址:https://原创 2018-01-21 16:00:45 · 286 阅读 · 0 评论 -
Androidstudio中将library生成为arr文件
1.jar、library、aar区别 jar:无法包含资源文件 library:可以包含资源文件 但是引入显得比较臃肿复杂 aar:可包含资源文件2.生成步骤 (1).新建或者导入Library。 (2).生成(根据需要生成) a.生成debug版本的 一般直接会在library目录下的build/output原创 2018-01-21 16:07:59 · 427 阅读 · 0 评论 -
GreenDao3.0以上数据库升级
一、思路:创建临时表-->删除原表-->创建新表-->复制临时表数据到新表并删除临时表;这样数据库表的更新就完成了二、步骤:1.准备工具类:MigrationHelper:public class MigrationHelper { public static boolean DEBUG = false; private static String TAG原创 2018-02-01 19:46:05 · 301 阅读 · 0 评论 -
集成PDF.js,然后再在WebView上加载实现查看pdf文件
一、背景:公司项目有个查看电子发票的功能,发票是pdf文件的,于是开始找方案,有个第三方库,效果不错,兼容性也好,github地址:https://github.com/barteksc/AndroidPdfViewer,但嵌入到项目里app一下增加了15M左右,实在有点难以接受,于是就尝试用js方式实现,经实践可行,包增加4M左右。二、实现:public class WebViewA原创 2018-02-01 20:04:58 · 3683 阅读 · 0 评论 -
自定义输入车牌号键盘
1.首先在res目录下新建文件夹xml,并在xml文件夹下创建3个文件,分别配置省、市、车牌号信息(1)province_abbreviation.xml<?xml version="1.0" encoding="utf-8"?><Keyboard xmlns:android="http://schemas.android.com/apk/res/android" an...原创 2018-03-16 14:06:25 · 2565 阅读 · 0 评论