
Android UI 开发
文章平均质量分 77
陈蒙_
大前端领域优快云博客专家,中科院计算机专业硕士,拥有11项发明专利。正在撰写《对比Java学Kotlin》一书。
展开
-
毁三观:从 onSavedInstanceState 中取值竟为空?!
记录一个毁三观的现象。为了在 Activity 被回收(实际是应用被回收了,系统不会单独回收 Activity,详见 到底是 Activity 被回收了还是进程被杀死了?)后重建时能够恢复之前的状态,我们会在 Activity#onSaveInstanceState() 方法里面保存一些数据,比如 id,然后在 Activity#onCreate(Bundle savedInstanceState) 中的 savedInstanceState 里面取出来做恢复工作。但是从线上监控发现,从 savedIn原创 2021-05-28 17:27:13 · 543 阅读 · 0 评论 -
安卓 Intent.getData() 为空
对于某个 Activity,我们可以通过两种方式打开:方式一:包名+Activityadb shell am start -n com.dianping.v1/com.example.MainActivity方式二:schemeadb shell am start -a android.intent.action.VIEW -d "somehost://mainactivity"需要注意的是,通过第一种方式打开的的 Activity,使用 getIntent().getData() 获取的 U原创 2021-05-12 10:44:43 · 2105 阅读 · 0 评论 -
在 support-v7 包中使用 LiveData
文章目录问题复现解决方案工作原理问题复现当我们在 Activity 中使用 LiveData 时,我们一般会这么用:public LiveDataDemoActivity extends AppCompatActivity { MutableLiveData<Integer> counter; @Override public void onCreate(Bundle savedInstance) { counter = new MutableL原创 2021-03-15 15:39:28 · 434 阅读 · 0 评论 -
Binary XML file line 2: Error inflating class
文章目录问题解决方案在开发中遇到一个神奇的坑,先做记录。问题功能很简单,给某个点击区域设置按压态,正常颜色是 @color/colorPrimaryDark,被点击时是 @color/colorPrimary,用 selector 实现,具体代码如下:MainActivity:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedIns原创 2020-05-27 14:25:01 · 2059 阅读 · 0 评论 -
扩大控件点击区域
以下为通用方法,默认将控件上下左右各扩大 3dp 的点击区域,读者可以自行将 3dp 修改为自己想要的数值: void increaseHotArea(View view) { Rect delegateArea = new Rect(); view.getHitRect(delegateArea); ...原创 2020-04-15 10:45:57 · 848 阅读 · 0 评论 -
安卓 PopupWindow 的 2 个坑
文章目录手势不透传遮盖导航栏手势不透传在 PopupWindow 展示的情况下,必须要先将其关闭才能继续后续动作,比如滑动列表等。而我们期待的效果是关闭 PopupWindow 的同时可以滑动列表,就像微信朋友圈那样:遮盖导航栏对于带有虚拟导航栏的手机,PopupWindow 的入场动画会遮盖虚拟导航栏。而我们期待的效果是从虚拟导航栏底部出现,就像微信朋友圈发状态那样:...原创 2020-03-31 14:32:29 · 430 阅读 · 0 评论 -
安卓监听剪切复制粘贴事件实例
本文的剪切复制粘贴事件只针对文本,URI 和 intent 不在讨论范围内。实例代码实现了2个功能:(1)监听剪切复制粘贴事件;(2)获取剪切复制或粘贴的文本;原创 2017-04-13 14:51:40 · 24796 阅读 · 2 评论 -
Activity 跳转时的生命周期流程
本文探究两个 Activity 相互跳转时生命周期方法的执行顺序。原创 2017-07-07 15:23:31 · 1430 阅读 · 0 评论 -
浅尝安卓事件分发机制
本文简单介绍安卓应用层的事件分发机制,并辅以案例进行分析。原创 2016-01-25 09:50:20 · 4039 阅读 · 3 评论 -
给 SwitchCompat 设置颜色的方法
本文介绍 SwitchCompat 控件设置颜色的方法。原创 2017-07-05 20:01:04 · 8545 阅读 · 0 评论 -
Activity#finish() 对其生命周期的影响
如果在 Activity#onCreate() 方法中调用 finish() 方法,其生命周期会发生什么变化?原创 2017-06-26 15:29:36 · 3928 阅读 · 0 评论 -
Activity 显式和隐式跳转利弊对比
本文对比 Activity 的两种跳转方式的利弊。原创 2017-03-08 15:46:02 · 4819 阅读 · 0 评论 -
TextView 高级教程
光看题目,估计有人已经忍不住吐槽了:尼玛,装X,TextView 这么简单的控件,还有什么高级用法吗?放在以前,我也会这么想,但是随着开发经验的积累,我愈发觉得 TextView 简直就是一座宝藏,里面有很多宝贝值得研究。原创 2016-10-06 11:01:16 · 9203 阅读 · 13 评论 -
Android 仿微信点赞和评论弹出框
本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框、发评论,及弹出位置的控制。原创 2015-12-16 11:25:04 · 50522 阅读 · 30 评论 -
安卓中计算 TextView 的宽高、打点
背景假如我们有一个 TextView 实例:TextView textView = new TextView(getContext());textView.setText("i love u...");textView.setTextColor(getResources().getColor(R.color.colorAccent));宽度计算这个 TextView 中...原创 2016-06-20 21:19:11 · 7129 阅读 · 0 评论 -
invalidate() vs postInvalidate() vs requestLayout()
三者都是 View 类中的方法,都是用来刷新 UI 的;invalidate() 和 requestLayout() 在主线程中调用,postInvalidate() 在子线程中调用。原创 2017-02-14 14:38:45 · 618 阅读 · 0 评论 -
Style 和 Theme 的异同
本文讲解安卓中 Style 和 Theme 的联系和区别,以及应用。原创 2016-09-12 20:15:10 · 1136 阅读 · 0 评论 -
如何解决安卓上羊角符只显示一横的问题
我们常用的人民币符号,有两个:¥¥(如果你看不出区别,不要怀疑我打错了,因为二者区别确实不大),前者是全角元,后者是半角元。原创 2017-11-17 15:41:36 · 9244 阅读 · 2 评论 -
安卓 TextView 七宗罪
本文探究 TextView 存在的几个坑,以及其中几个坑的解决方法。原创 2016-04-01 17:51:14 · 16052 阅读 · 17 评论 -
Android PopupWindow 的显示位置
本文在上一篇博客 Android PopupWindow 仿微信点赞和评论弹出框 中例子的基础上,探讨 showAsDropDown() 和 showAtLocation() 参数的作用。1. Android 坐标系Android 坐标系是以左上角为原点,水平向右是 x 轴,竖直向下是 y 轴。showAsDropDown() 中的坐标是相对于anchor的偏移值,而 showAtLo原创 2015-09-04 09:59:15 · 14743 阅读 · 3 评论 -
Parcelable 和 Serializable 的区别
文章目录Serializable,简单Parcelable,高效Serializable,简单public class SerializableDeveloper implements Serializable String name; int yearsOfExperience; List<Skill> skillSet; float favori...原创 2019-09-29 15:26:58 · 266 阅读 · 0 评论 -
TouchMode 101
文章目录1. 啥是 TouchMode2. 为啥要有 TouchMode3. 何时使用 TouchMode4. 如何使用 TouchMode5. 参考文献1. 啥是 TouchMode现在的智能设备,包括智能手机、平板电脑、智能电视等,可以有多种交互/输入方式,常见的方式有触屏、蓝牙外接键盘、外接手柄、遥控器等。其中触屏方式就是 TouchMode。2. 为啥要有 TouchMode说道交...原创 2019-06-10 18:07:36 · 303 阅读 · 0 评论 -
focus search returned a view that wasn't able to take focus!【已更新】
文章目录问题表现复现路径问题原因解决方案参考文献问题表现E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.edittextdemo, PID: 9528 java.lang.IllegalStateException: focus search returned a view that wasn't abl...原创 2019-06-13 14:37:39 · 2174 阅读 · 0 评论 -
IllegalStateException: Can not perform this action after onSaveInstanceState
Fragment Transactions &amp; Activity State Loss 让你不再俱怕 Fragment State Loss原创 2018-07-12 16:37:45 · 212 阅读 · 0 评论 -
onAttachToWindow & onDetachFromWindow
看代码的时候,发现某个控件在内部做了请求网络的操作。问题来了,如果控件移除屏幕或页面被销毁,则需要处理下未完成的网络请求,将其取消掉。取消的时机如何选择?由于是公共控件,希望能在控件内部完成取消操作,候选时机包括:onAttachToWindow()onDetachFromWindow()onFinishTemporaryDetach()onStartTemporaryDetach()...原创 2018-06-28 19:10:11 · 3938 阅读 · 3 评论 -
安卓不同主题的页面视图层级
两种主题下的页面对比: 两种主题下的页面层级结构对比:原创 2018-04-19 20:09:07 · 440 阅读 · 0 评论 -
Activity 转场动画踩坑
目标效果实现方案Activity#overridePendingTransition()android:windowAnimationStyle参考文章目标效果页面出现的效果是自下向上滑入,消失的效果是自上向下滑出,时长、速度未知。实现方案为表述方便,我们假设由 Activity A 打开 Activity B。Activity#over...原创 2018-03-08 16:51:43 · 4053 阅读 · 0 评论 -
安卓获取帧渲染耗时的方法
TaktAndroidDevMetricsAndroidPerformanceMonitorADB Monitor | GPU获取最近 120 帧的绘制数据,adb shell dumpsys gfxinfo yourAppsProcess (reset/framestats),将数据复制到 txt 文件中,excel - data - 文本hierarchyviewer,用命令行打开原创 2017-01-16 10:04:26 · 4322 阅读 · 2 评论 -
Android 常用参考文档
本文记录开发过程中常用的参考数据。原创 2016-01-22 12:44:06 · 1346 阅读 · 0 评论 -
安卓 systrace 报错的解决方法
使用 Monitor 的 systrace 功能时,有时会遇到报错: Unable to find trace start marker 'TRACE:'。解决方法是换用更高版本系统的真机,或者,使用 Genymotion 的 Nexus 系列的模拟器。原创 2017-12-29 15:57:21 · 1868 阅读 · 0 评论 -
自定义控件实践——单选/多选文本标签流
本文在自定义流式布局的基础上,实现了具有单选和多选功能的文本标签流。原创 2017-01-06 17:31:34 · 968 阅读 · 0 评论 -
TextView 文本过长时自动打点
需求如下:一行有两个文本区域,二者间距至少30px;第二个全部显示,第一个过长时打点显示;是用纯 xml 布局实现该需求。原创 2016-03-24 20:06:45 · 6733 阅读 · 0 评论 -
磊石成山积跬步:FrameLayout v.s. LinearLayout v.s. RelativeLayout
FrameLayout v.s. LinearLayout v.s. RelativeLayout 的优劣比较。原创 2016-01-28 21:49:09 · 1292 阅读 · 0 评论 -
刘下记录:ImageView.scaleType 属性全解析(含视频)
ImageView 有一个常用场景:ImageView 的高度或宽度固定,宽度或高度等比例缩放,且 ImageView 在 padding 全部为 0 的情况下不留白边,即图片完全填充 ImageView。这篇文给出了这个场景的答案,翻译过来以背不时之需。翻译 2016-01-22 12:47:37 · 2141 阅读 · 0 评论 -
修改 Mac 版 AndroidStudio 虚拟机内存大小
之前一直在调整 /Applications/Android Studio.app/Contents/bin/studio.vmoptions 的内存大小,但是不起作用,下面的方法才是正确的。原创 2015-12-01 10:06:17 · 8461 阅读 · 0 评论 -
用 TouchDelegate 扩大子 View 的点击区域
点击区域的大小会影响到用户体验,除了扩大可点击 View 的 padding 之外,今天偶遇另一种方法,在父 View 级别增大子 View 的点击区域。gist 被墙,csdn code 402,暂且当做博客记录,以备不时之需。翻译 2015-11-19 17:46:31 · 2128 阅读 · 0 评论 -
燕过留声:由 Activity 和 Fragment 的通信方法想到的【WIP】
今天查看 Fragment 的官方文档,发现2点值得细究的地方:Fragment 和 DetailActivity 均被定义为 static,而非定义在单独 .java 文件中;Activity 和 Fragment 之间以及 Fragment 和 Fragment 之间的通信方法;关于第1点,参见另一篇博文《雪习新知识:一张图看懂 Java 内部类》。 本文探讨第2点,感觉这是一种好的思想。原创 2015-10-31 23:41:41 · 1790 阅读 · 0 评论 -
Android View.INVISIBLE 和 View.GONE 的区别
View.INVISIBLE该控件不可见,但是在布局中仍旧占据空间;View.GONE该控件不可见,但是在布局中不占据空间,效果跟该控件不存在一样;原创 2015-08-06 17:14:18 · 3986 阅读 · 0 评论 -
Android 多页面左右滑动
通过左右滑动屏幕来切换页面,有4种方式:(0) 使用ScrollLayout;(1) 使用动画;(2) Activity 实现 OnTouchListener 和 OnGestureListener 接口;(3) 使用 ViewPager;本文将对上述各个方式逐一介绍。原创 2014-09-07 16:11:57 · 10797 阅读 · 0 评论 -
ADB server didn't ACK * failed to start daemon * 解决方法
3个命令行即可解决该问题。原创 2015-05-01 09:21:49 · 1665 阅读 · 0 评论