控件
文章平均质量分 72
锐湃
这个作者很懒,什么都没留下…
展开
-
Android设计模式实战 ,实现一个弹窗引擎封装dialog
最近项目使用的一个第三方库很多线上 Bug 所以考虑换一个第三方库了,结果去除依赖之后导致基本每个页面都要修改,项目全部爆红,人都麻了,悔不该当初图方便没有使用引擎类啊。第三方库提供基本的各种功能,引擎类封装一层给自己的项目预定特定的效果,上层应用只需要调用引擎即可实现效果,不需要关心底层的实现,不需要引用第三方的依赖和类库。当我们第三方库升级或替换的时候,只需要修改引擎类即可。下面我以弹窗库的封装为例,封装一个弹窗引擎库,下来就一起来看看吧。转载 2024-09-24 10:14:55 · 214 阅读 · 0 评论 -
以一种简单的方式来实现弹幕效果
弹幕的无限滚动:确保弹幕能够连续地滚动,而不是在到达末尾时重新开始。弹幕的多行显示:能够在屏幕上同时显示多行弹幕,并且每行弹幕独立滚动。滚动速度的控制:能够控制弹幕的滚动速度,以实现流畅的视觉效果。本文将通过一个示例项目来展示如何实现上述功能。gif图有点卡,可以自行运行一下看效果。通过本文的介绍,我们实现了一种简单的弹幕效果。使用和,不仅实现了多行弹幕的效果,还可以通过控制scrollBy方法的速度,实现弹幕的平滑滚动。这种方式非常适合在需要显示大量动态文本信息的场景中使用,例如商品评论等。转载 2024-09-20 13:46:57 · 185 阅读 · 0 评论 -
为什么View的 onDetachedFromWindow 方法不一定执行
其实 setView 是在 onResume 方法之后,内部流程是通过 PhoneWindow 获取 WindowManagerImpl 来调用 addView 方法,其内部会调用 WindowManagerGlobal.addView 方法,最后调到 ViewRootImpl 的 setView 方法。从源码中可以看到,View 的 onDetachedFromWindow 方法其内部是由 View 的 dispatchDetachedFromWindow 调用的。转载 2024-09-10 14:46:48 · 78 阅读 · 0 评论 -
5年了,ViewPager2 终于支持 overScrollMode,没错,我干的。
这个 bug 被扔进了 backlog 将近5年,现在这个坑总算被填上了,我自己很开心,开发者后面更新版本后发现这个属性能用了肯定也会很开心,可能这就是开源的乐趣所在吧。androidx 从最开始提出到现在,其实一直都是开源,并且鼓励开发者贡献的。希望各位小伙伴平时发现问题,分析问题,解决问题之后,都可以慷慨将自己的方案提交给 Google,这除了能帮到全球数以万计的开发者之外,自己也能获得一份满满的成就感,何乐而不为呢?作者:Mr_万能胶。转载 2024-08-19 16:10:45 · 88 阅读 · 0 评论 -
用Kotlin改造AsyncLayoutInflater
Coroutine可以提供解析的子线程和切换到主线程,使用挂起函数就不需要接口回调了,并且可以自由的取消任务。所有工作就可以了,复制一份AsyncLayoutInflater代码改造,代码一下子少了很多。中不断从队列中获取布局的解析任务放在子线程中执行,解析完成变成 View 之后通过。,而且不太建议同时间内大量使用,会频繁的切换线程导致CPU碎片时间过多反而会卡顿。当我们的UI布局因为过于复杂,影响冷启动或者用户体验的时候,可以用。,如果大家需要单独定义一个线程池或者添加线程名称等,可以这样操作。转载 2024-08-08 14:26:24 · 72 阅读 · 0 评论 -
模拟发送键值
本文介绍了在Android中模拟发送键值的方法,并提供了一个示例应用。Android提供了一个名为Instrumentation的类,它允许我们在应用程序中模拟用户的操作。simulateKeyEvent方法中,我们创建了一个新的线程,在该线程中使用Instrumentation类的sendKeyDownUpSync方法来模拟发送回车键事件。在上述代码中,我们首先在onCreate方法中获取到模拟发送键值的按钮,并为其设置一个点击事件监听器。下面我们来创建一个示例应用,演示如何模拟发送键值。转载 2024-07-30 17:58:03 · 137 阅读 · 0 评论 -
使用HTML.fromHtml为文字设置颜色和大小
由于项目需求需要实现一个TextView中含有不同大小不同颜色的文本,但TextView本身根本无法实现,出于写法的精简性我又不想另外多写几个TextView,所以打算采用HTML类中的fromHtml函数通过html标签解析实现。转载 2024-07-16 13:51:49 · 202 阅读 · 0 评论 -
TextView使用Html.formHtml()解析带base64图文混编的内容
【代码】TextView使用Html.formHtml()解析带base64图文混编的内容。转载 2024-07-16 13:47:42 · 37 阅读 · 0 评论 -
lineSpacingExtra textview无作用
如果你在使用 LinearLayout 或者 RelativeLayout 作为容器,确保没有其他布局参数会影响行间距,例如。在 TextView 中无效,可能的原因是你使用的是 Android 的旧版本,或者是在某些特定的布局条件下不起作用。如果你正在使用自定义的 TextView 或者 Layout,确保没有覆盖或重写会影响行间距的方法。如果上述方法都不能解决问题,尝试使用其他方法增加行间距,例如通过自定义 TextView 并重写。如果问题依然存在,请提供更多的代码和上下文信息以便进一步诊断。转载 2024-07-16 13:30:42 · 88 阅读 · 0 评论 -
系统中设置TextView的行间距
2、设置行间距的倍数:android:lineSpacingMultiplier,取值范围:浮点数,如果值大于1.0表示增加行间距,如果值小于1.0表示减少行间距,等于1.0时表示无变化。1、设置行间距:android:lineSpacingExtra,取值范围:正数、负数和0,正数表示增加相应的大小,负数表示减少相应的大小,0表示无变化。为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier。转载 2024-07-15 21:35:34 · 406 阅读 · 0 评论 -
隐掉edittext 输入时带下划线
隐掉edittext 输入时带下划线原创 2024-07-15 18:30:28 · 219 阅读 · 0 评论 -
Android edittext 输入时带下划线
在 Android 中输入编辑文本字段时,我需要删除下划线.对于名字,编辑文本的第一个字母应该是大写的,所以我已经给出了,但在我的例子中,我在 edittext 字段中看到了下划线.如何删除它?转载 2024-07-15 15:46:12 · 136 阅读 · 0 评论 -
Android实战场景 - 限制EditText仅支持输入数字、英文、汉字,禁止输入表情等特殊符号
EditText相关Blog基本认知起初我以为有俩种方式可以实现这个功能第一种 键盘弹出不显示表情选项,从根源解决问题(失败,因为每个手机的Rom烧制都是固定的,很难去操作,主要是水平有限)第二种 正常显示表情选项,但是输入之后EditText进行过滤,不做显示处理,这样我们传输的时候就不会出现错误后来再回头的看的时候,发现常见的有俩种方式实现我们的需求通过 正则过滤禁止输入的内容(也就是上方的第二种方式)通过 三方框架 做处理,大多实现原理相同自定义TextWatcher + 正则过滤限制正则:转载 2024-07-10 13:50:58 · 375 阅读 · 0 评论 -
EditText限制输入表情和特殊符号的处理
Android EditText限制输入表情和特殊符号的处理转载 2024-07-10 13:41:04 · 102 阅读 · 0 评论 -
判断ViewStub是否被inflate 过的方式。
我们在使用ViewStub的时候,一般ViewStub都是特定条件出发inflate的。这种触发条件有多个的时候(或者有多处ViewStub的inflate 代码时)我们往往需要判断ViewStub之前有没有inflate过。所以每次在inflate的时候重新findViewById去页面中寻找一下ViewStub,如果返回值不为null则ViewStub没有被inflate过。2.利用ViewStub的parent来判断。当ViewStub被inflate后,getParent返回值是null。转载 2024-07-04 20:27:36 · 85 阅读 · 0 评论 -
viewstub如何使用databinding
在Android开发中,ViewStub是一个轻量级的View,用于在布局中延迟加载其他View。假设我们有一个Activity布局,其中包含一个Button和一个ViewStub。在Activity中,我们需要绑定ViewModel和布局,并根据isTextViewLoaded的状态来显示或隐藏ViewStub。首先,我们需要在xml布局文件中定义Activity的主要布局,包括一个Button和一个ViewStub。接着,我们需要准备ViewStub的布局文件,这里我们使用一个简单的TextView。转载 2024-07-03 19:41:17 · 226 阅读 · 0 评论 -
代码动态写 viewstub
在Android中,ViewStub是一个不可见的,大小为0的View,在布局优化中起着重要的作用。ViewStub可以在布局文件中占位,当需要显示ViewStub中的内容时,通过调用。在实际的应用场景中,你可能需要根据条件动态决定是否要替换ViewStub中的内容,或者要替换成什么样的布局。方法,该ViewStub占位符会被替换为指定的布局资源。如果你想要动态地写ViewStub,你可以在代码中使用。是你在XML布局文件中定义的ViewStub的ID,是你想要ViewStub替换成的布局资源的ID。转载 2024-07-03 18:53:43 · 54 阅读 · 0 评论 -
用于指定视图在无障碍模式android:importantForAccessibility
是Android中的一个属性,用于指定视图在无障碍模式下的重要性。例如,如果你不想让某个视图在无障碍模式下被通知,你可以将其设置为。将不会在无障碍模式下被通知,因为我们将。在XML布局文件中设置。转载 2024-06-20 13:50:55 · 451 阅读 · 0 评论 -
The specified child already has a parent. You must call removeView() on the child‘s parent first问题
在我们添加视图的时候(此时我添加的是ImageView),通过视图去获取其parent。然后通过判断parent中是否含有这个视图,如果有就删除掉,没有。将parent中的控件删除后就保证添加到的父容器中不会重复添加,此时就不会报错了。这种一般是出现在viewpager无限轮播的时候需要不断的添加,这时候这么写已经不能解决了。这样就在销毁的时候将view移出,下次添加的时候就不会出现已经有parent的情况。这时候就需要将destroyItem中的代码注释。这只是一种方案,如果有更好的可以评论告诉我。转载 2024-06-07 11:08:38 · 108 阅读 · 0 评论 -
TouchDelegate详解及优化,view点击区域扩展
因为我们为View1设置了TouchDelegate,所以会进入TouchDelegate的onTouchEvent(),如果这个方法返回了ture,View1的onTouchEvent()也会返回true并到此结束,对外宣称View1消费了这个事件,但实际上并不会触发View1的onClick();,阅读View.java的onTouchEvent()源码可知,这种情况下View1的performClick()不会被调用,也就不会触发View1的onClick()转载 2024-06-06 10:40:17 · 190 阅读 · 0 评论 -
鲜为人知的TouchDelegate,控件点击区域扩展
首先获取的是当前view相对于父view的坐标,然后在switch中判断当前触屏点是否在构造函数指定的区域内,如果在则后边的if语句就是true,会执行被委托视图的dispatchTouchEvent方法,当然如果触屏点不在指定区域内就返回false,也就是返回到了View的onTOuchEvent中,继续往下执行View的onTouchEvent逻辑。总之,如果要用这个方法,就把Android 9对应的文件拷出来,新建子类,继承TouchDelegate,好在这个类比较简单,这么做代价不大。转载 2024-06-06 10:34:43 · 119 阅读 · 0 评论 -
getDimension()、getDimensionPixelSize()、getDimenPixelOffset()
我们在自定义View的时候,通常会指定自定义View的字体大小,然后我们获取字体大小的时候,可以有三个方法供选择。这三个方法的差异在哪里呢?我们先说结论,然后举一个具体的例子来实操一把。如果在xml文件中指定的单位是 dp,或者 sp的话 getDimension()、getDimensionPixelSize()和getDimenPixelOffset()的结果值都是将资源文件中定义的dp值乘以屏幕密度。转载 2024-06-05 21:19:02 · 421 阅读 · 0 评论 -
扩大View点击区域[支持同时扩展多个子View],TouchDelegate
一年多前写过一篇文章,, 此方法存在诸多限制,且只能对其中一个子View进行点击范围的扩展, 今天想到一个新的思路, 实现并支持扩展任意多个子View的点击范围,供君参考(源码见文末)。转载 2024-06-05 21:12:03 · 64 阅读 · 0 评论 -
扩大View点击区域TouchDelegate
开发过程中经常会遇到如下这种场景,对于CheckBox而言,整体较小,然后为了用户体验--“好点”,往往需要扩大点击区域。通常的做法就是给CheckBox增加Padding以达到扩大点击区域的目的,但是为了对齐UI,往往需要一通计算跟调整才能“如愿以偿”,可谓哭笑不得。那怎么样可以优雅的解决这个问题呢?可以配合实现在xml上的直接处理。转载 2024-06-05 21:08:39 · 108 阅读 · 0 评论 -
ViewPager 无限循环
使用这种方式启动的时候,需要将 2 号图片,设置为第一张,当向前滑动的时候,因为前面的 1号图片 是和 4 号图片一样,那么,给人的错觉就像是无线循环的一样,当选中一号图片后,立即将当前选中的图片设置为 4 号图片,4号图片向5号图片滑动也是同理。将 ViewPager 的Count 的数量设置的尽可能的大,然后就造成了无限循环的假象。第二种,方式是,假如三个图片无限循环,那么就需要用5张图片,如下图所示。基本的需求已经实现,如果还有更多的需求,还可以根据上面的扩展。测试我们的Adapter。转载 2024-05-30 20:23:24 · 194 阅读 · 0 评论 -
关于ViewPager的setCurrentItem方法
mFirstLayout为true,表示smoothScroll,效果就是平滑滚动。如果想要设置为不平滑滚动,可以使用两个参数的方法。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/ScottePerk/article/details/123212593。就不列出了,关键代码就是Button的切换。这个方法可以直接定位到指定的page,并且还有动画。效果就是直接切换,没有任何动画。转载 2024-05-30 20:21:05 · 157 阅读 · 0 评论 -
点击事件,第一次无效,第二次才响应的问题
今天碰到的问题,android的标题栏一个回退button,每次进入的时候第一次点击无效,一直到第二次点击时才响应,然后把代码copy到系统的回退按钮里面,结果每次都能响应,后面想了想,应该跟焦点有关系。版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/hj563308597/article/details/50131131。转载 2024-05-30 10:04:12 · 107 阅读 · 0 评论 -
RecyclerView宫格拖拽效果实现
本篇到这里就结束了,我们利用RecyclerView实现了宫格图片的拖拽效果,主要是借助ItemTouchHelper实现,从ItemTouchHelper中我们能看到很多巧妙的的设计,里面有很多值得我们学习的技巧,特别是对事件的处理、绘制顺序调整的方式,如果做吸顶,未尝不是一种方案。作者:时光少年链接:https://juejin.cn/post/7348707728921853971来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。转载 2024-04-16 17:02:26 · 173 阅读 · 0 评论 -
Kotlin自定义View
说说Kotlin和Java感觉差异比较大的地方。首先是变量的生命,Kotlin声明时必须赋值或者初始化,java则不用,开始有点不习惯。Kotlin不需要分号结尾,Kotlin的循环用起来简直爽YY。首先是这次自定义View的效果图,是一张饼图。如果是用java写的话也就几十行,觉得换成Kotlin的话可能会更少。主要的功能是可以任设定数据的个数,我这里是4个数据,可以任意设定每个数据的颜色。#####首先上Kotlin代码##########相同功能Java代码#####转载 2024-04-15 15:19:47 · 480 阅读 · 0 评论 -
优雅地实现 Dialog 弹窗
可能早就有人已经发现了,我们现在对话框的调用方式跟 Compose,React 很相似,也就是最近很流行的声明式 UI,为什么说它流行,比我们传统的命令式UI好用,主要的差别就在于声明式UI调用方只需要在乎视图的描述就可以,而真正视图如何渲染,如何测量,调用方不需要关心。转载 2024-04-15 14:38:30 · 584 阅读 · 0 评论 -
自定义控件之自定义属性
上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性。本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解。有关原理知识请参考Android自定义控件之基本原理(一)这篇文章。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云。转载 2024-04-15 14:22:49 · 90 阅读 · 0 评论 -
自定义控件之基本原理
在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云1. 应当遵守Android标准的规范(命名,可配置,事件处理等)。2. 在XML布局中可配置控件的属性。转载 2024-04-15 14:11:49 · 39 阅读 · 0 评论 -
ViewPager2的介绍,以及它的使用示例
ViewPager2 是 Android 官方提供的一个用于实现页面滚动视图的库。它是 ViewPager 的增强版,基于 RecyclerView 实现,提供了更多的功能和更好的。ViewPager2 能够更有效地处理页面切换,并且支持垂直方向的滑动。可以实现页面滚动视图,常用于展示图片画廊、应用主界面标签页等场景。由于基于 RecyclerView,可以充分利用 RecyclerView 的各种配置功能,如 ItemDecoration、LayoutManager 等。转载 2024-04-12 17:58:58 · 460 阅读 · 0 评论 -
Viewpager的使用
写一个自定义的PagerAdapter适配器类,继承自AndroidX的ViewPager库中的PagerAdapter类(想用时直接调取,就不用那么麻烦每次写一遍)原文链接:https://blog.csdn.net/weixin_65399034/article/details/134618922。这里我让它每2秒就过一张图片,当手指触碰图片时,则让它停止自动轮播,放开图片则让它继续自动轮播。之后就可以写Activity.java文件了。引导页,图片浏览器,广告轮播,,应用导航,软件教程等等用途。转载 2024-04-12 17:47:25 · 36 阅读 · 0 评论 -
ViewPager控件
ViewPager可以实现多个界面的左右滑动。广告页长被用于首页,可以自己切换,也可以手动切换。使用ViewPager实现广告页,主要是要判断是否在手动切换,可以添加来判断。Handler类处理自动切换事件@Overrideitem = 0;转载 2024-04-12 17:36:47 · 38 阅读 · 0 评论 -
Android布局优化:include 、merge、ViewStub详细总结
另外需要注意的是,如果我们想要在标签当中覆写layout属性, 必须要将layout_width和layout_height这两个属性也进行覆写,否则覆写效果将不会生效 2,一个xml布局文件有多个include标签需要设置ID,才能找到相应子View的控件,否则只能找到第一个include的layout布局,以及该布局的控件。同样我们通过一个小demo说明一下,比如我们需要保存一个用户信息,用户名是必须保存的,但是其余信息是不必要的,这是其余信息就可以一开始不显示出来,用户想输入的时候在现实出来。转载 2024-04-12 09:50:47 · 353 阅读 · 0 评论 -
Android布局总结四:Merge总结
可以看到,这里我们将ok_cancel_layout最外层的LinearLayout布局删除掉,换用了merge标签,这就表示当有任何一个地方去include这个布局时,会将merge标签内包含的内容直接填充到include的位置,不会再添加任何额外的布局结构。接下来的部分就有问题了,在最外层的LinearLayout当中包含了两个元素,一个是EditText,另一个又是一个LinearLayout,然后在这个内部的LinearLayout当中才包含了确定和取消这两个按钮。看上去效果非常不错对吗?转载 2024-04-11 20:33:51 · 1141 阅读 · 0 评论 -
Android Studio中使用ImageButton时显示“Missing contentDescription”的处理方法
当点击该ImageButton后,就会有语音功能,提示的内容为图2中所示的contentDescription的值,即“Hello World”。对于ImageButton这种没有文字的控件,那些视力有障碍的用户就没办法使用,因此需要语音来提示这些用户,当前控件的作用。contentDescription属性就可以实现以上功能,如图2所示。在华为手机中打开TalkBack功能的方法是,选择“设置->辅助功能->无障碍->TalkBack”,之后打开TalkBack功能开关,如图3所示。转载 2024-04-09 15:03:06 · 269 阅读 · 0 评论 -
android:contentDescription 的用途的用途
android系统会自动使用人声朗读控件上android:contentDescription属性说指向的内容。但是对于一些视力有障碍的用户,android提供给用户一个很有用的功能,可以帮助使用app。3.由于这个控件没有text属性,对于一些用户来说,无法理解这个控件是做什么的。这个属性必须在用户的Accessible 中的相应属性开启后才能使用。这个属性的主要功能就是为视力有障碍的人增加对控件的解释。这样用户就可以知道这个控件是做什么用的。一般来说,用户很少使用这个属性。2.在应用中添加这个属性。转载 2024-04-09 14:59:11 · 541 阅读 · 0 评论 -
Android自定义控件之自定义组合控件
前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一)、自定义属性Android自定义控件之自定义属性(二)。今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发成本,以及维护成本。Android自定义控件之基本原理Android自定义控件之自定义属性Android自定义控件之自定义组合控件Android自定义控件之自定义ViewGroup实现标签云。转载 2024-03-26 20:16:02 · 45 阅读 · 0 评论