
Android 原生开发
本专栏里面汇总了作者在Develop和Code Review阶段遇到的有意思的问题,问题或解决的方式大多是不容易被搜索到的(至少在发表的当时)。目的除了自我总结之外,更多是给同路人提供一个思路,希望通过知乎专栏这个平台,能够让我更多地帮助他人。如是,则心满意足了,感谢每一位到访者
萧文翰
高级测试开发工程师;
著图书《Flutter从0基础到App上线》、《打造流畅的Android App》、《深入浅出Android Jetpack》、《Go语言从入门到项目实战》;
著课程《零基础通关Go语言》、《Flutter跨平台开发实战》。
展开
-
【聊技术】在Android中实现自适应文本大小显示
本周的聊技术话题和大家说说如何在Android中实现自适应文本大小显示。想象一下,在布局中,通常显示文本的区域大小是固定的,但是文本长度并不总是固定的。比如列表中的文章标题、界面下方的按钮文本等等。为了尽可能让这些文字可见,传统的做法是通过文本长度设置文本大小,或者通过android:ellipsize属性设置文本省略方式等等。实际上,从Android O开始,Android API引入了自适应文本大小的简易实现。它不仅可以用于TextView,对于Button等具有文本显示的控件同样适用。通过and原创 2020-12-08 10:23:05 · 1558 阅读 · 0 评论 -
记一次腾讯TBS浏览服务集成实践
这次的分享源于最近的实际开发工作。项目需求是在原生Android应用中嵌入WebView,放置用于支撑音视频直播业务的Web页;另外还需提供Word、Excel、PowerPoint、PDF等常见文档格式的内容预览。经过一番技术选型,最终选定集成腾讯TBS浏览服务进项目,支撑如上所述两个功能。能力集成首先进入下图所示网页,在该下载页下载SDK并保存。下载成功后,将jar包放入要集成该能力的Module的libs目录下。随后,在Android Studio中以Project原创 2020-11-30 13:20:26 · 909 阅读 · 0 评论 -
解谜:为何用了9-Patch背景图后自带Padding属性?
本次分享的主题源于笔者在实际开发中遇到的问题。具体现象为:当普通的9-Patch图用作TextView的backGround属性后,整个TextView便有了一定的Padding值。但笔者并没有给定padding属性,甚至在预览视图中,也没有展现出padding效果。但运行起来后,便莫名其妙地有了内边距。我们先来看布局代码:<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.an原创 2020-10-24 07:19:37 · 344 阅读 · 0 评论 -
像写Flutter一样开发Android原生应用
要问到Flutter和Android原生App,在开发是有何区别,编程方式是绕不开的话题。Flutter采用声明式编程,Android原生开发则采用命令式编程。声明式编程 VS. 命令式编程我们首先要明确的,是何为声明式编程,何为命令式编程。何为声明式编程摘录一段来自百度百科的定义:声明式编程通常被定义为除命令式以外的编程范式。同时存在一些其他的定义,这些定义不是简单的将声明式编程和命令式编程做对比,例如:声明式编程是告诉计算机需要计算“什么”而不是“如何”去计算;任何没有副作用的编程语言原创 2020-07-17 14:23:40 · 1245 阅读 · 0 评论 -
阿里云移动研发平台体验报告
今天,我们来聊聊移动端原生开发。本篇文章涉及Android/iOS两大移动端,将从产品优势和使用方式两大角度解读阿里云移动研发平台(EMAS)。一、产品优势阿里云平台所提供的移动研发平台,英文简称为EMAS,意为Enterprise Mobile Application Studio。从名称上看,该能力有企业级的运行承载能力。官网上对其定义描述如下:移动研发平台(Enterprise Mo...原创 2020-04-27 11:37:11 · 709 阅读 · 0 评论 -
解放双手,在PC端进行Android真机调试
scrcpy简介(拼写是scrcpy,非Python爬虫框架Scrapy)简单地来说,scrcpy就是通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备。它可以通过USB连接,也可以通过Wifi连接(类似于隔空投屏),而且不需要任何root权限,不需要在手机里安装任何程序。scrcpy同时适用于GNU/Linux,Windows和macOS。一些特性亮度...转载 2019-11-25 15:30:00 · 1121 阅读 · 0 评论 -
破解Android设备无法联调的谜题
这篇文章要感谢来自知乎的小伙伴:子非鱼,他最近被一件事情困惑,那就是:Android手机无法联调了。在解决完他的疑问后,突然意识到,其实自己在前一段时间也曾遇到同样的问题,最后居然还怀疑是电脑和手机不兼容导致的。然而,罪魁祸首居然是数据线。好了,下面我们来看一下具体情况吧。我们都在使用苹果公司的Mac OS,手机都是小米。子非鱼同学使用的是红米Note3,我使用的是小米9SE。现象一样,都是插...原创 2019-10-29 19:14:53 · 433 阅读 · 0 评论 -
巧用Handler获取View控件信息
文章导引巧用Handler获取View控件信息为何获取宽高要如此?巧用Handler获取View控件信息为何如此就可获取到正确的值了呢?巧用Handler获取View控件信息众所周知,在Android实际开发中,对于某些复杂多变的情况,控件的位置摆放、大小控制并非是xml类型的layout文件完全可以搞定的。此时,我们通常会使用Java代码来通过动态计算,将指定的控件摆放在相应的位置,并限定其...原创 2019-01-14 23:12:09 · 1033 阅读 · 0 评论 -
优化Activity启动速度的另类解法
今天来给大家分享一个性能优化的经验,主要在Activity启动方面。 众所周知,给用户即时的响应是增强移动设备用户体验的重要一环,而Activity在启动过程中,又会经历至少onCreate(), onStart(), onResume()这三个回调过程。而在这三个过程中,又会经历绘制界面、载入数据、恢复现场等等实际操作。这对于一个Activity的启动多少都是会产生影响的。 通常意义上讲,我...原创 2018-07-29 12:48:45 · 2986 阅读 · 0 评论 -
解决TextView引起的莫名崩溃
进了2017年之后到现在,我一直都在忙着做一款IM应用,功能和微信、QQ类似。 在开发和测试的过程中,发现了几个可以总结记录的东西,今天和大家来分享其中之一。 首先来看一个异常: java.lang.ArrayIndexOutOfBoundsException: length=125; index=-1at android.text.StaticLayout.calculateEllipsi原创 2017-04-06 09:50:35 · 5869 阅读 · 1 评论 -
Mapbox 地图SDK极速集成指导
这次跟各位分享一个地图的SDK。先说说为什么拿Mapbox来用吧。 首先就是——国际化。当需求要显示国外的地理位置信息的时候,通常使用的是Google Map。但是Google Map目前需要手机带有完整的Google Play套件才行,但是基本上所有的国内上市的手机都把Google Play套件阉割了。然后就是偏移量,从目前来看,Mapbox的路网和卫星照片是重合的,而Google Map则是有原创 2016-12-22 11:42:14 · 8655 阅读 · 5 评论 -
简易实现脸部贴近自动关屏
简易实现脸部贴近自动关屏博主最近工作超忙,好久没来更新博客了,真是抱歉。 今天分享给大家一个简易的Demo,实现的效果是:当手机屏幕贴近脸部时,屏幕自动熄灭。当然,由于是简单的思路,所以这里所谓的“熄灭”并非真的关闭屏幕,而是简单地使用一张黑色背景的图片遮盖住所有显示的内容,看上去像是关闭了屏幕而已。 整个实现思路较为简单,首先启动监听器,监听距离变化,一旦距离到达一定的接近值的时候,就关掉屏幕原创 2016-10-16 17:48:47 · 1591 阅读 · 0 评论 -
取之有道——巧用Root权限 启动其他APP中的Activity
这次博主来分享一个很巧妙的办法来启动其他APP中Activity的方法。 首先说一下这样做的目的:最近博主在攻克一个技术难点,就是搞定某些三方系统中,对于应用权限的限制。为此给出用户指导,引导用户启动系统中的权限设置来设置信任。到此,问题就来了:我们不知道权限设定的包名,也不知道权限设置的Activity的名字,如何启动到指定的界面呢? 今天我们就来解决这个问题。 首先,我们需要一台已经获取R原创 2016-06-16 14:05:41 · 2458 阅读 · 0 评论 -
为了安全——应用锁屏开发实战
今天我们来谈一个问题:应用锁屏。 说老实话,这种设定目前已经被广泛使用了,多见于支付宝、京东金融、QQ等对安全性和隐私性要求较高的程序使用。 关于该功能的实现,有不止一条解决办法。这里就不一一列举了,只对其中一种做详细解释和示例程序的代码分享。 这里我声明一下,好像自从写博客到现在,我一直都在用Android Studio为IDE来开发,强烈建议还在使用Eclipse的小伙伴尽快使用它。尽管一原创 2016-03-16 15:49:45 · 853 阅读 · 0 评论 -
Activity与DialogFragment交互的方法
好久没有更新博客了,今天我们来讨论一下如何在Activity与DialogFragment交互的方法,这里包括了DialogFragment的启动以及Activity方法的调用。 DialogFragment与Dialog相比类似,是官方现在更建议使用的Dialog。 DialogFragment的定义 新建一个DialogFragment,该类继承DialogFragment。复写onCre原创 2015-10-27 20:23:49 · 5620 阅读 · 1 评论 -
Android GridView 点击效果(可能是最快捷的实现,另有福利)
好久没有发过文章了,今天给朋友们分享的是:给GirdView添加点击效果, 点击时改变背景 。 这其实也是我在项目开发中遇到的问题,习惯性的百度了一圈,又Google了一圈。解决方案大致可归为两类: 1. 代码实现,逻辑处理,监听点击时间,改变相应控件的BackGround; 2. Selector实现,用XML定义,Layout中赋予相应属性。首先第1个解决办法,怎么说呢,虽然逻辑不是很复杂原创 2015-08-12 16:41:02 · 3641 阅读 · 0 评论 -
Android平台录音音量计的实现
今天博主要给大家分享的是如何在Android平台上实现录音时的音量指示计。开门见山,先来看一张Demo的效果图: 如上图所示,两个按钮分别是开始录音和停止录音,中间的两个数字前后分别代表音量档位(目前是8档)和原始音量值(0-32767),下方是音量计,由ProgressBar负责显示。 完整的源码可以在下面的网址找到: https://github.com/XiaoWenHan/Andr原创 2015-07-08 13:31:50 · 1615 阅读 · 0 评论 -
调用系统相机导致照片旋转问题的修复
如题,相信很多开发者在调用系统照相机接收拍好的照片时,发现照片被无故旋转了90度。这一问题反映在大部分的三星手机上,当然其他的机器还没试完全,总之是有问题。 于是乎想到如下的解决办法: 识别机型,获取手机型号,然后判断是否需要旋转; 通过获取照片宽度和高度判断是否需要旋转; 自己动手写一个照相机Activity,自己来获取摄像头数据,保存照片; 分析发生旋转的照片数据,动态判断是否原创 2015-07-02 14:29:56 · 3065 阅读 · 1 评论 -
提升应用崩溃时的用户体验——去掉烦人的“很抱歉”提示框
好久不见了。 最近,博主一直在忙着搞建站的事情,也有一段时间没有更新博客了,很抱歉。同时,希望朋友们访问我的主站,加收藏的就更好了,哈哈! 相信很多在用或者用过Android系统的的手机的朋友都有过这样的经历:自己玩着玩着某个程序,突然屏幕一黑,然后出现一个对话框,提示很抱歉,应用程序已经停止工作。这意味着程序已然崩溃了,用户唯一要做的就是接下来重新运行这个程序,或者去干些别的。我个人推测,前者原创 2015-04-21 19:51:37 · 1899 阅读 · 0 评论 -
解决Android录音iOS兼容性问题
最近在开发过程中遇到问题,Android客户端录制的AMR_NBbia原创 2014-09-11 10:50:46 · 3062 阅读 · 0 评论 -
抓出卡顿元凶,从分析掉帧开始
这次我们依旧来谈谈有关性能优化的话题,这次我们会用到Google给我们提供的分析工具——Systrace。如果你还不了解这个工具,最好先了解一下。Google 官方文档:https://developer.android.com/studio/command-line/systrace我们还会用到一个Demo,用来对比卡顿和不卡顿的状况。Demo运行起来会是这样的:流畅运行模拟卡顿...原创 2019-02-25 10:23:48 · 3697 阅读 · 0 评论