![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
安卓
梦想不只是梦与想
这个作者很懒,什么都没留下…
展开
-
Flutter状态管理:Provider使用之ChangeNotifierProvider
Flutter状态管理转载 2022-12-09 17:13:59 · 1559 阅读 · 0 评论 -
java多态的理解
多态方法调用的优先级: this.show(O(o )、super.show(O(O )、this.show )、super.show (super )、super (o ) )对象后,用该父类引用调用子类重写的方法,此时多态就出现了。多态是方法的多态,不是属性的多态(多态与属性无关)。多态的存在要有3个必要条件:继承,方法。,父类引用指向子类对象。原创 2022-09-16 10:31:57 · 100 阅读 · 0 评论 -
taskAffinity详解
一个Android应用程序功能通常会被拆分成多喝Activity,而各个Activity之间通过Intent进行连接,而Android系统,通过栈结构来保存整个App的Activity,栈低的元素是整个任务栈的发起者。一个合理的任务调度栈不仅是性能的保证,更是提供性能的基础。当一个App启动时,如果当前环境中不存在App的任务栈,那么系统就会创建一个任务栈。原创 2022-08-25 10:18:49 · 1257 阅读 · 0 评论 -
小米手机toast显示不全
排查了好久,最后是因为换行转义字符的锅,把\n换为\r\n,完美显示。原创 2022-07-27 10:12:05 · 1617 阅读 · 0 评论 -
手机屏幕共享工具
投屏 投屏软件 工具原创 2022-07-07 11:41:34 · 706 阅读 · 0 评论 -
ImageView比例缩放
备注: adjustViewBounds只有在ImageView一边固定,一边为wrap_content的时候,设置为true,可以让ImageView的比例和原始图片一样的效果。原创 2022-06-11 15:01:43 · 553 阅读 · 0 评论 -
Debug.startMethodTracing,trace文件找不到
是因为生成文件的路径不是sd卡的根目录,网上的代码大部分还是不靠谱的。生成的文件在sd卡:Android/data/packagename/files/xxx.trace参考文章:启动优化工作选择 - 白一粥 - 博客园...原创 2021-12-02 11:45:09 · 632 阅读 · 0 评论 -
音频开发_如何获取单词的音频mp3文件
1.gstatic oxfordhttps://ssl.gstatic.com/dictionary/static/sounds/oxford/no--_gb_1.mp3https://ssl.gstatic.com/dictionary/static/sounds/oxford/yes--_gb_1.mp32.有道词典http://dict.youdao.com/dictvoice?type=1&audio=sheilahttp://dict.youdao.com/dictvoic转载 2021-11-16 00:13:15 · 971 阅读 · 0 评论 -
流式布局FlowLayout使用
原先用的是三方的流式布局,后来发现google自己也有,效果是一样的。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" an原创 2021-10-19 13:37:04 · 1442 阅读 · 1 评论 -
Notification
最近时不时地有人问我这样或那样的通知如何实现,所以本文将根据个人经验对Notification做个总结,以供参考!什么是通知(Notification)通知是一个可以在应用程序正常的用户界面之外显示给用户的消息。通知发出时,它首先出现在状态栏的通知区域中,用户打开通知抽屉可查看通知详情。通知区域和通知抽屉都是用户可以随时查看的系统控制区域。作为安卓用户界面的重要组成部分,通知有自己的设计指南。在Android 5.0(API level 21)中引入的 Material Design 的变化是转载 2021-10-19 11:52:32 · 636 阅读 · 0 评论 -
BottomNavigationView底部图标和文字的显示问题
一、BottomNavigationView3个以上图标不显示文字当图标大于3个时,显示图标和当前页的文字。调用BottomNavigationView的setLabelVisibilityMode方法可以解决布局设置:<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bnv_main" app:menu="@menu/bottom_nav原创 2021-10-17 11:34:52 · 2804 阅读 · 2 评论 -
发布aar包到maven仓库
Android:发布aar包到maven仓库以及 maven插件 和 maven-publish 插件的区别在日常开发中,不可避免的需要把自己的 library 发布到 maven 仓库中,这样使用起来也更加方便。发布 aar 包到 maven 仓库,主要是使用 Gradle 提供的插件: maven 插件(旧版),在 Gradle 6.2 之后,就完全被弃用了(增加了@Deprecated注解) maven-publish 插件 maven插件,是 Gradle 1.0 的..转载 2021-10-12 13:40:21 · 2220 阅读 · 0 评论 -
资源id与资源名称互相转换
Android 资源名称(name)和id互相转换,动态获取一、通过传递图片名称,获取对应的图片idpublic int getId(String name){ Resources res=getResources(); //return res.getIdentifier(name,null,null);//带上地址 例如 包:type/name (org.anjoy.act:drawable/ic) return re转载 2021-09-12 12:08:54 · 413 阅读 · 0 评论 -
布局动画 LayoutTransition
在API 11后,添加了两个能实现在创建后添加控件仍能应用动画的方法,分别是android:animateLayoutChanges属性和LayoutTransition类。他们的API 等级必须>=11。使用方法:ViewGroup使用LayoutTransition即可为布局变化应用动画效果。ViewGroup#setLayoutTransition(LayoutTransition) android:animateLayoutChanges="true"通过...原创 2021-05-19 18:39:07 · 455 阅读 · 7 评论 -
SeekBar高度设置、自定义样式
最近在自定义SeekBar的滑块、拖动条时,发现底部的背景和滑块一样高,鼓捣了半天也没有效果,主要还是SeekBar的高度、滑块高度、拖动条高度定义未搞清楚,现在做个记录以便以后参考:1、滑块高度:可以在自定义Drawable文件中,通过<size android:height="10dp" android:width="10dp" />设置<selector xmlns:android="http://schemas.android.com/apk/r...原创 2021-05-14 15:14:06 · 2905 阅读 · 7 评论 -
Broadcast广播的分类
BroadcastReceiver(广播接收器),属于Android四大组件之一。在分析ANR产生原因时,涉及到部分广播的知识,我将针对广播类型,做个记录:1. 普通广播(Normal Broadcast)即开发者自身定义intent的广播(最常用),也就是并行广播。发送广播使用如下:Intent intent = new Intent();//对应BroadcastReceiver中intentFilter的actionintent.setAction(BROADCAST_AC...原创 2021-04-30 14:42:04 · 2495 阅读 · 2 评论 -
Android ANR 原理分析
ANR 简介ANR:Application Not Responding,即“应用程序无响应”。Android 运行时,AMS 和 WMS 会监测应用程序的响应时间,如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会上报 ANR。ANR 的触发分为以下几类, InputDispatching Timeout:输入事件(包括按键和触屏事件)在5秒内无响应,就会弹出 ANR 提示框,供用户选择继续等待程序响应或者关闭这个应用程序(也就是杀掉这个应用转载 2021-04-30 11:51:45 · 1838 阅读 · 1 评论 -
android 跳转到当前应用的详情、设置页面
分析三方权限申请源码时,发现不错的逻辑,做个记录: Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) .setData(Uri.fromParts("package", getPackageName(), null)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);...原创 2021-04-28 11:03:20 · 2579 阅读 · 4 评论 -
自定义控件-时间轴
由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。1、先增加自定义属性:<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="global_TimelineLayout"> <!--时间轴左偏移值--> <attr name="global_line_margin_left" for原创 2021-04-25 09:41:55 · 635 阅读 · 4 评论 -
android存储路径详解
前言前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安装不了,提示解析包出错。后来查询发现,安装apk是调用了PackageInstaller,没有相关权限,这个无法获取内部路径,所以会安装不了。借机也复习了一遍Android下面存储相关的知识点,特来总结一番。存储分类对于Android存储目录,我总结成一张思维导图,如果有需要原图的,请在..转载 2021-04-20 17:53:38 · 12783 阅读 · 2 评论 -
toast能在子线程中弹出吗
Android人知道在安卓中不能在子线程中更新ui,为什么呢?真的不能吗?先做个试验,我们在子线程中调用toast,看看有什么效果,按照上边一句话的意思,这里应该会报错显示不能再子线程中刷新ui吧val thread = object : Thread() { override fun run() { Toast.makeText(this@MainActivity, "123", Toast.LENGTH_LONG).show() }}thread.start转载 2021-04-18 23:14:54 · 470 阅读 · 2 评论 -
获取顶部状态栏高度
//获取顶部status bar 高度private int getStatusBarHeight() { Resources resources = mActivity.getResources(); int resourceId = resources.getIdentifier("status_bar_height", "dimen","android"); int height = resources.getDimensionPixelSize(resourceId);.原创 2021-03-18 10:16:21 · 621 阅读 · 0 评论 -
maven设置每次构建获取最新jar包版本号
一般开发过程中,版本都是SNAPSHOT版本的。在跨工程引用的时候,获取最新版本的jar。经常就是不断的更新版本,通过版本变更来获取最新版本的jar。其实是可以声明变化版本,让gradle每次编译都去获取最新时间戳版本的jar(目前只可以解决相同分支jar问题,如果是多分支合作,代码获取会存在问题)。build.gradle中的依赖是通过设置maven依赖实现。我们知道,maven可以说是通过一个坐标定位来确定唯一一个包的,所说的坐标定位分别是groupId,artifactId和versi...原创 2021-03-17 11:55:08 · 2968 阅读 · 0 评论 -
小米手机电量和性能的白名单
小米手机Note 3有个“电量和性能”设置,如果没有把app设置为无限制,侧app在后台很容易被杀,导致每次重新启动app,针对该情况,做了个判断/** * 电池优化设置 */object BatteryOptimization { /** * 判断当前APP是否有加入电池优化的白名单(目前只限于小米 Note3手机) */ fun isIgnoreBatteryOptimization(activity: Activity?):...原创 2021-02-03 14:20:30 · 3151 阅读 · 2 评论 -
drawable 资源目录加载顺序
1、同一张图片放在不同文件夹下有什么不同?Android默认的资源检索顺序?比如真机分辨率是xxhdpi,那么如果将图片放在xhdpi下图片会被放大,而将图片放在xxxhdpi中图片会被缩小。drawable-xxhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。但是,如果drawable-xxhdpi文件夹下没有这张图时, 系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,我们当前的场景就是drawable-xxxhdpi文件夹,然后发现这里也没有转载 2020-12-24 19:02:08 · 568 阅读 · 1 评论 -
Scrollview嵌套webview空白
最近在做一些页面详情页的时候,因为需要用到ScrollView嵌套webview进行部分网页的显示。因为之前用的是6.0的android版本测试的,所有没有发现问题。后来在android9.0的版本测试的时候,才发现会出现,webview的页面显示为空白或者高度为0这两种情况。网上查了好多解决方案,基本都不能用,虽然有一个在onPageFinished里面重新设置webview的高度,但是这种限死高度的事情肯定是会有问题的,所有基本也可以放弃这个方案。最后通过测试webview的加载过程,在初始化的转载 2020-11-13 10:51:08 · 366 阅读 · 0 评论 -
AbstractProcessor使用小结
1、没有注册信息,也就没有目标类生成使用 google auto-service添加依赖,一定别忘了加 annotationProcessor,auto-service 的原理是找到被@AutoService标记的自己写的Processor,然后生成注册信息,如果没依赖 annotationProcessor 就没有注册信息,也就没有目标类生成build.gradledependencies { implementation 'com.google.auto.service:au原创 2020-11-11 18:01:33 · 3274 阅读 · 0 评论 -
加速maven构建
maven仓库用过的人都知道,国内有多么的悲催。还好有比较好用的镜像可以使用,尽快记录下来。速度提升100倍。<url>http://maven.aliyun.com/nexus/content/groups/public</url>android工程配置如下:...原创 2020-11-04 21:56:28 · 154 阅读 · 0 评论 -
DrawerLayout常用方法
1、当DrawerLayout滑动出来的时候,默认是会给侧边栏下面部分的界面蒙上一层阴影,如果需要去除阴影:drawer.setScrimColor(Color.TRANSPARENT);//也可以设置为想要的颜色2、DrawerLayout的侧边滑动可以通过设置锁定模式来禁用:drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);备注:这样设置侧边栏弹出之后无法使用滑动来关闭,只能通过点击空白区域来关闭侧边栏,可以..原创 2020-10-30 18:05:10 · 759 阅读 · 0 评论 -
Jetpack 之 LifeCycle 组件使用详解
一、LifeCycle 简介LifeCycle 是一个可以感知宿主生命周期变化的组件。常见的宿主包括 Activity/Fragment、Service 和 Application。LifeCycle 会持有宿主的生命周期状态的信息,当宿主生命周期发生变化时,会通知监听宿主的观察者。LifeCycle 的出现主要是为了解决: 系统组件的生命周期与普通组件之间的耦合性。系统组件指:Activity/Fragment、Service 和 Application。 普通组件指:将代码按照功能或者作用转载 2020-09-27 13:57:59 · 104 阅读 · 0 评论 -
ItemTouchHelper基本用法
ItemTouchHelper是谷歌提供的用于实现Recyclerview 拖拽效果的帮助类,今天我们来学习下它的基本用法首先ItemTouchHelper需要实现它的一个内部抽象类CallBackpublic class ItemTouchHelperCallback extends ItemTouchHelper.Callback { private IMoveAndSwipeCallback iMoveAndSwipeCallback; public...转载 2020-09-21 16:51:45 · 3292 阅读 · 0 评论 -
Android 布局文件(view)生成Bitmap
已测量过的View生成Bitmap 即经过测量、布局、绘制并显示在界面上的View,此类View无需再次进行测量和布局,可直接将内容绘制到指定的Bitmap上。/** * 绘制已经测量过的View */private static Bitmap drawMeasureView(View view) { int width = view.getWidth(); int height = view.getHeight(); Bitmap bitmap = ...原创 2020-08-17 17:26:02 · 2227 阅读 · 3 评论 -
CPU个数、CPU核心数、CPU线程数
CPU个数、CPU核心数、CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的双核,多核。CPU除了核心数之外,还有线程数之说,下面文本就来解释一下CPU的核心数与线程数的关系和区别。CPU个数即CPU芯片个数CPU的核心数是指物理上,也就是硬件上存在着几个核心。比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组。线程数是一种逻辑的概念,简单地说,就是模拟出的CPU核..转载 2020-07-15 22:39:30 · 897 阅读 · 0 评论 -
字符串转换成对应资源id
比如说:字符串”R.mipmap.a“,项目中需要把它转换对应的int类型资源id,可以这么用:context.getResources().getIdentifier("a","mipmap",context.getPackageName());其实就是一个拼接的过程。原创 2020-05-31 19:15:28 · 566 阅读 · 1 评论 -
Android MediaPlayer 播放音频文件
1.把本地音频文件放入res/raw文件夹2.播放代码try { mPlayer = new MediaPlayer(); AssetFileDescriptor file = mContext.getResources().openRawResourceFd(R.raw.chat_bell); try { mPlayer.setDataSource(file.g原创 2020-05-30 17:41:37 · 494 阅读 · 0 评论 -
Android 系统常用Intent意图
(1)闹钟创建闹钟(ACTION_SET_ALARM)示例Intent:public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) //用于标识闹钟的自定义...转载 2020-05-20 15:16:51 · 1247 阅读 · 0 评论 -
Android原生方式获取经纬度
Android原生方式获取经纬度优惠码优惠2019-07-10 15:12:06浏览1824android 函数 string void networkAndroid原生方式获取经纬度两种定位方式:GPS定位、WiFi定位优劣:如果项目定位要求较高还是建议使用三方地图库GPS定位相比Wifi定位更精准且可在无网络情况下使用,但在室内基本暴毙无法使用WiFi定位没有室内外限制也不需要开启GPS但需要联网,另外测试发现WiFi定位时onLocati...转载 2020-05-12 08:57:07 · 555 阅读 · 0 评论 -
ScrollView嵌套WebView填坑
最近项目中有页面用到ScrollView嵌套WebView,代码如下:<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swiper" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <...原创 2020-05-09 14:52:12 · 983 阅读 · 0 评论 -
setClickable 和 setEnable 事件分发影响
1、setEnable:findViewById(R.id.iv).setEnabled(false),view的单击事件无法响应(onclick方法)因为可以看到setEnable(false) 将View的flag打上了DISABLED,如下: @RemotableViewMethod public void setEnabled(boolean enabled) {...原创 2020-03-19 11:26:21 · 423 阅读 · 0 评论 -
判断view是否可见
判断一个view是否可见,我们平常用以下代码比较多if(webView.getVisibility() == View.VISIBLE){ //可见 }else{ //不可见 }但是有时候布局会嵌套,如: <LinearLayout android:id="@+id...原创 2020-03-16 15:06:39 · 1936 阅读 · 0 评论