Android
文章平均质量分 58
bdmh
多年从事软件开发工作,现在主要从事移动端应用开发
展开
-
Flutter:安装依赖报错doesn‘t support null safety
大概的意思是,你当前的系统sdk版本是3.1.3,是支持空对象的安全技术,而你要引入的http的版本小于0.13.0,不支持空安全,所以两个不匹配,报错。在这个区间的http包(http >=0.2.8+2原创 2023-11-06 15:27:29 · 3268 阅读 · 0 评论 -
Flutter配置Android SDK路径
原因就是Flutter找不到Android的SDK路径,所以无法识别模拟器,我们用flutter doctor命令检查环境时,就好看到提示。在使用VSCode作为开发Flutter的工具时,当选择调试设备时,通常看不到android的模拟器,只能看到Chrome之类的。原创 2023-10-09 10:21:32 · 2703 阅读 · 2 评论 -
Android:URLEncoder空格被转码为“+”号
另外,Android提供了Uri.encode,虽然可以正常转码空格,但是它不需要转换的字符和URLEncode有一点差别,大家在用的时候,根据情况选择即可。但当使用URLEncoder时,会发现字符串中的空格被转换成“+”号,如果编码后的内容入库后,将导致读取时,前段本来是空格的地方,会显示成“+”号字符。Android前段和后端接口交互时,经常会遇到特殊字符,比如表情、特殊标点等,这样在Url中是无法识别的,需要进行转码,后端进行解码交互。建议自己仿照官方的代码,写一套自己转码和解码过程,这个不难的。原创 2023-01-09 10:04:13 · 2537 阅读 · 0 评论 -
Dialog and WindowManager$BadTokenException
在Android的开发中,Dialog的使用已经非常的频繁,在使用过程中,我们需要留意一些细节,不然就会导致诸如下面的错误发生。那今天我们就来分析一下,在开发中,导致这种错误的常见的操作。Dialog的创建需要一个上下文Context,内部需要根据这个Context创建一个PhoneWindow。当我们在一个Activity中使用Dialog时,Context通常就是所属的这个Activity对象。如果报错,也就是这个Activity上下文出现了问题。你要保证Activity是正常活动状态才行。原创 2022-07-04 14:43:35 · 688 阅读 · 0 评论 -
Android项目中嵌入Cocos游戏项目
Cocos的生态相比Unity要逊色很多,网上搜索的各种文章,基本都是比较早期的,无法在较新版本环境中使用,这里以Cocos 3.3版本为例,讲一下在自己的Android项目中嵌入Cocos项目。一、创建Cocos项目(略)。二、编译Cocos Android工程。需要下载NDK。在偏好设置中,设置路径。Cocos菜单中选择“项目——构建发布”,弹出如下界面。我已经创建了一个名字为android的构建任务,大家可以新建一个。“build”是 工程构建的目录,“..原创 2022-03-23 14:18:59 · 11537 阅读 · 2 评论 -
在Mac M1芯片下使用Android Studio模拟器
相信很多朋友都被Mac电脑的M1芯片坑了一把,很多诸如Docker、VirtualBox、Genymotiion、甚至连Android Studio自带的模拟器都无法使用了。好在各厂商都在努力解决这个问题。Android Studio的使用,可以下载专门为M1新版开发的版本。链接如下:https://redirector.gvt1.com/edgedl/android/studio/install/2020.3.1.25/android-studio-2020.3.1.25-mac_arm.dmg安原创 2021-11-19 10:34:08 · 10102 阅读 · 5 评论 -
Android:让我们来写一写Binder
Binder作为Android中跨进程通信的一部分,在源码中是起了极其重要的作用。比如ActivityManagerService,就是通过Binder来控制Activity的操作。至于Binder的通信,很多文章都是通过创建AIDL工程,由工具自动生成代码,就会看到诸如Stub、Proxy等内部类,看的是一头雾水。所以要想明明白白的使用Binder,自己手写一遍,对理解是非常有效的。以下以在两个进程间通信为例来写一个Binder。客户端首先定义一个接口,包括Binder标识,发送Transac原创 2021-03-12 14:16:06 · 587 阅读 · 0 评论 -
Activity生命周期总结
Activity生命周期总结方式 生命周期 备注 单一Activity(启动) onCreate onStart onResume 单一Activity(关闭) onStop onDestroy ①MainActivity中打开TestActivity MainActivity: onPause TestActivity: onCreate TestActivit..原创 2021-03-09 14:17:29 · 292 阅读 · 0 评论 -
Android:解读TextView的DynamicLayout
在《Android:TextView的Layout创建过程》中我们提到过,TextView中有三种Layout,我们已经讲了两种,今天我们就来说说第三种,动态布局DynamicLayout。我们平时使用的带链接的、ClickSpan等带样式的TextView,都会默认由这种布局进行处理。下面我们定义一个带链接的TextView。 <TextView android...原创 2020-03-25 10:26:26 · 2034 阅读 · 0 评论 -
Android:解读TextView的StaticLayout
StaticLayout用于布局之后,不会再进行编辑的文本。Android:TextView的Layout创建过程中提到过Layout创建的过程,所以这里直接从TextView的makeSingleLayout开始。当判断不满足DynamicLayout和BoringLayout之后,就会开始StaticLayout的创建。我们在布局中对TextView进行如下设置:手机屏幕密度为4。...原创 2020-03-17 11:11:42 · 2379 阅读 · 0 评论 -
Android:解读TextView的BoringLayout
A BoringLayout is a very simple Layout implementation for text that fits on a single line and is all left-to-right characters. You will probably never want to make one of these yourself; if you do, b...原创 2020-03-12 16:48:45 · 1582 阅读 · 0 评论 -
Android:TextView的Layout创建过程
TextView组件,使用频率非常高,虽然使用起来比较简单,但是它的实现其实是一个复杂的过程。它对文字的管理是通过Layout实现的。TextView内部会根据不同的设置,创建不同的Layout,总共有三种。DynamicLayout:用在EditText或者TextView中设置的是Spannable类型的文字(比如ClickSpan,URL等)。BoringLayout:常用在处理单行...原创 2020-03-10 11:25:21 · 1966 阅读 · 0 评论 -
Android:别让ListView的各种scroll迷失了
目录scrollTo(View.java):不建议使用scrollBy(View.java):setSelectionFromTop(AbsListView.java);setSelection:(ListView.java)scrollListBy(AbsListView.java):scrollTo(View.java):不建议使用这个滚动是滚动的View的位置,并不是ListView内部的Item滚动,它是通过改变mScrollX或mScrollY的值,通过画布的tr.原创 2020-11-24 13:27:17 · 1127 阅读 · 0 评论 -
如何查找Manifest merger failed with multiple errors问题原因
做android程序,在gradle文件中免不了引入第三方的库,添加库之后,同步gradle,碰到Manifest merger failed with multiple errors问题,也不是什么稀罕事,但是一堆的编译过程提示的错误,看着头就大,无从下手。比如在某次编译时,出现如下错误。然后在Build Output面板中,看到的是如下任务出现错误:接下来我们看看如果通过查看日志,查找问题原因。命令 ./gradlew如果使用出现Permission denied错误,就先使原创 2020-07-20 11:06:39 · 616 阅读 · 0 评论 -
Andorid:版本不匹配导致的Installation failed due to invalid APK file
最近将Gradle升级,新建项目,并在模拟器中运行,没想到出现了无法安装的错误。Installation failed due to invalid APK file查看LogCat日志,有Couldn't load memtrack module的错误提示。模拟题是 8.0-API-26,gradle的配制是 compileSdkVersion 28 buildT...原创 2020-02-01 11:14:43 · 1744 阅读 · 1 评论 -
Android获取进程是否在后台注意事项
当我们需要判断进程是否在后台运行时,需要原创 2014-10-24 11:44:19 · 6471 阅读 · 2 评论 -
在Android项目中配置Protocol Buffer环境
环境部署:下载Protocol Buffer的exe、source及maven,因为从官网下载需要翻墙,这里提供Protocol Buffer 2.5及maven3.2.3的资源下载,下载文件列表protobuf-2.5.0.tar.bz2:这里是源码protoc-2.5.0-win32.zip:这里是protoc.exeapache-maven-3.2.3原创 2014-12-12 12:01:11 · 3589 阅读 · 2 评论 -
垃圾的Android-ListView-setEmptyView
我们知道ListView组件提供了一个空数据是的视图设置方法setEmptyView,该方法存在一个诟病,就是空视图和listview组件要在一个Parent中,这个就不在此细说,下面说另一个问题,原因其实和前面那个问题同出一辙。 假如emptyView和listview在布局中,已经属于同一个parent,设置EmptyView的代码如下 private void setEmptyView原创 2017-01-04 14:03:44 · 2112 阅读 · 1 评论 -
Android-onCreate时,measure真的能获取到view的尺寸吗
环境 Android Studio 2.3.2 + API(24)我们在布局时,如果某个view的width或height设置为MATCH_PARENT的话,如下<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_main" android原创 2017-05-19 15:24:11 · 1405 阅读 · 0 评论 -
Android-TextView的includeFontPadding到底行不行
我们在使用TextView时,显示的文字与控件四周都会有一定的间隙,特别是上下间隙,有时候对我们的布局对齐问题会带来一定的麻烦,当你搜索解决办法时,都会得到同一个信息,就是设置includeFontPadding=false,但当你设置之后,却发现,不是你想要的结果。对includeFontPadding的解释基本上就是说可以去掉留白,但是这个留白到底是留的哪个白,却很少有人说清楚,不要留白,原创 2017-09-27 10:57:32 · 14612 阅读 · 2 评论 -
Android-ViewFlipper的滑动与子视图中item点击的冲突解决
场景:ViewFlipper中添加了几个View,每个View中有几条itemView,每个itemView设置了setOnClickListener,ViewFlipper中通过GestureDetector来控制左右翻页效果。问题:不滑动,点击每个itemView,运行正常,当触发了滑动后,手势抬起时,依然会执行itemView的click事件解决:在继承的ViewFlipper中,拦原创 2017-10-31 09:51:03 · 5579 阅读 · 1 评论 -
Android:Dialog中隐藏键盘的注意事项
场景:弹出一个Dialog,里面有一个EditText,用来输入内容,因为输入时,需要弹出键盘,所以当Dialog消失时,键盘要一起隐藏。现在我们做一个自定义的DialogMyDialog extends Dialog一开始认为这个功能很容易实现,于是写了下面的代码//Dialog的构造函数中写 this.setOnDismissListener(new OnDismissListener原创 2016-04-13 15:24:37 · 8141 阅读 · 8 评论 -
TextSwitcher实现分析
上一篇博客《TextSwitcher实现文字上下翻牌效果》中我们知道了TextSwitcher的大致用法,那现在来看看TextSwitcher内部是如何实现文字交替的。TextSwitcher 继承自 ViewSwitcher使用TextSwitcher时,我们通过setFactory先给它设定了一个ViewFactory,这个在ViewSwitcher代码中 /** * Sets原创 2016-03-16 15:12:42 · 3633 阅读 · 0 评论 -
TextSwitcher实现文字上下翻牌效果
我们知道TextView是最常用来显示文字的组件,那么加入有一系列的内容,需要逐条的上下滚动播出,这样的效果就需要TextSwitcher来帮忙了。加入布局中已经存在一个TextSwitcher元素,那么使用时,需要写如下代码 tvNotice = (TextSwitcher)rootView.findViewById(R.id.tv_notice); tvNotic原创 2016-03-16 13:13:37 · 6573 阅读 · 3 评论 -
android.support.v4.view.ViewPager 如何动态更换显示内容
看一段简单的代码,在一个pager里面显示两个TextViewList items = new ArrayList();adapter = new MyPagerAdapter(); TextView tv = new TextView(getActivity()); tv.setText("第一页"); items.add(tv); tv = new TextView(g原创 2015-09-15 10:57:28 · 11874 阅读 · 1 评论 -
Android内存优化:ArrayMap
通常我们在使用key-value存储数据时,随手就会打出HashMap的代码,当数据量较小时,还可以,当数量比较多的时候,如果是PC机上,也还说得过去,但是如果使用设备是手机等移动设备,这是就要慎重了。因为手机的内存非常宝贵,不像PC那样不计后果的使用,内存使用不当很容易就会引起OOM的问题。那Android开发团队,也为我们找到了HashMap的替代品ArrayMap。 官方对ArrayMap也原创 2015-10-16 12:47:32 · 12385 阅读 · 0 评论 -
坑爹的ViewPager
Android开发中,常会遇到侧滑翻页的效果,android.support.v4.view.ViewPager让这种实现变得简单易用,但是通常使用时,都是让ViewPager的宽和高去match_parent,或者布局时制定了ViewPager的高度,所以一切正常。偶然的一次布局改变,着实一头雾水了半天。 场景:页面某个区域显示ViewPager用来翻页,但是ViewPager中的试图并不是设计原创 2015-09-06 13:51:58 · 4431 阅读 · 6 评论 -
Android:PendingIntent的FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT
当我们自己使用Notification在通知栏提示消息时,我们通过点击下拉的消息,来打开app指定的页面,如果需要传递更多信息时,可以通过PendingIntent。在使用中,碰到了一些问题,主要是参数FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT,总结如下:PendingIntent有一个getActivity方法,第一个参数是上下文,没啥好说的,第二个参原创 2014-12-08 16:07:10 · 41590 阅读 · 12 评论 -
Android模拟器中模拟缩放
几经查找无果,无意中发现原创 2014-09-15 17:44:57 · 7682 阅读 · 1 评论 -
Android败笔之ListView设置分割线颜色
使用下面代码设置分隔线颜色,无效,从这两行代码看,应该没什么问题吧,也是很常规的写法。 listView.setDividerHeight(1); listView.setDivider(new ColorDrawable(Color.GRAY));为什么无效呢?看看setDivider的源码 public void setDivider(Drawa原创 2014-09-24 13:29:28 · 57583 阅读 · 14 评论 -
Android:不使用布局文件,为Listview填充数据
因为多人开发,为了是自己开发的模块fangbia原创 2014-08-06 11:09:57 · 6322 阅读 · 1 评论 -
Android Intent调用 Uri的使用几种格式
原文地址 http://blog.csdn.net/zhuifeng11/article/details/6654133//调用浏览器//显示某个坐标在地图上Uri uri = Uri.parse("geo:38.899533,-77.036476");Intent it = new Intent(Intent.Action_VIEW,uri);start转载 2014-06-13 15:27:43 · 4061 阅读 · 0 评论 -
Android内存优化:Handler
内存泄露 handler原创 2015-10-19 16:59:28 · 2225 阅读 · 2 评论 -
Android:都是Layout的BaselineAligned惹的祸
此问题来自一个网友的提问http://ask.csdn.net/questions/206909#answer_140060看下面的布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" an原创 2015-09-16 16:27:47 · 7440 阅读 · 0 评论 -
Android:AsyncTask
AsyncTask是异步任务,在不阻塞UI线程的情况下,在后台处理复杂逻辑,并将结果返回到UI线程,现在来分析一下AsyncTask的实现。 先来看看我们常见的使用方法。 先声明一个类,继承自AsyncTask。 class MyTask extends AsyncTask{ @Override protected Integer doInBackground(Void... p原创 2015-10-21 17:02:02 · 1943 阅读 · 1 评论 -
Android:进程间通信交互
Intent 的 ComponentName广播-BroadcastReceiverContentProviderAIDL原创 2015-12-08 10:04:50 · 6848 阅读 · 1 评论 -
Netty:options和configs
在使用Netty时,初始化服务端或客户端时,我们经常会看到如下代码Bootstrap b = new Bootstrap();......b.channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true);通过option方法设置一些选项(参数),它其实是一个Map,维护这键值对,option方法在Abstract原创 2015-11-26 09:51:59 · 8587 阅读 · 1 评论 -
Netty框架初探
Netty实现服务端和客户端的TCP通信原创 2015-11-19 14:52:24 · 5906 阅读 · 1 评论 -
Netty:Bootstrap的handler和childHandler
介绍Bootstrap中handler和childHandler的区别原创 2015-11-19 15:16:15 · 18162 阅读 · 3 评论 -
Netty:ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter
前面说到,服务端和客户端通讯,我们通常要绑定一个handler(Netty:Bootstrap的handler和childHandler)进行通道的监听,当收到数据时就会触发某个事件,从而进行进一步的处理。目前我们用的比较多的就是ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter。ChannelInboundHandlerAdapt原创 2015-11-19 15:31:10 · 27379 阅读 · 3 评论