- 博客(129)
- 资源 (14)
- 收藏
- 关注
原创 Java 8 集合 Stream
Java 8 是一个成功的版本,新增的内容很实用。比如大家熟悉的 lamda 表达式,集合的 Stream,等等。本文讲讲 Stream 的使用。
2022-11-27 15:57:15 724
原创 Android 10 分区存储
以前,Android 开发者习惯在根目录建一个自己应用的文件夹,用于存放应用的数据。这样会导致用户卸载后,应用数据不会随之删除。导致手机文件特别混乱,长期占用空间,而且容易泄露用户隐私。其实 Android 早就提供了 getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir() 等 API 供开发者使用,但是开发者为了方便,没有去用。
2022-09-17 08:23:31 9981 1
原创 Android RadioGroup clearCheck() 的一个坑
通过debug,发现clearCheck之后,如果有RadioButton被选中,回调onCheckedChanged会被调用两次。今天在通过RadioGroup的clearCheck方法将所有的RadioButton设置为非选中的时候,发现怎么也不行。两次的checkedId分别是-1和选中的那个RadioButton的id。可以在clearCheck之前先把回调置空,然后clearCheck之后再设回来。如何避免选中的id被回调?...
2022-07-18 21:32:32 1152
原创 Android LayoutInflater 的一个坑
这样的话,如果要对添加的View做操作,可以传入false,最后再通过addView添加到容器中去。通过调查发现,最后一个参数传true和false,返回的View是有差别的。然后对view设置LayoutParams的时候,怎么也不起效果。最后一个参数传了true,就是想偷懒,省去addView的操作。...
2022-07-18 21:31:50 443
原创 Android 自定义 View - 四个构造函数
View 的构造函数有四个:1. `public View(Context context)`2. `public View(Context context, @Nullable AttributeSet attrs)`3. `public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr)`4. `public View(Context context, @Nullable AttributeSet attrs
2022-07-16 17:37:08 3587
原创 Andorid 自定义 View - 自定义属性 - 属性重复导致冲突
先来看一个自定义属性重复的例子:attrs.xml这样会报错如下:解决办法也很简单,把相同的属性抽出来定义就可以。
2022-07-12 19:35:53 572 1
原创 Andorid 自定义 View - 自定义属性基础
当我们自定义 View 的时候,至少要定义两个构造函数。第二个构造函数中的参数 attrs 可以获取在 xml 中添加的属性的值。系统已经给我们定义了以下属性,可以在 sdk/platforms/android-xx/data/res/values/attrs.xml 中找到。我们也可以自定义属性。declare-styleable 定义属性分组,名称一般和自定义 View 的名称一样。在 R 文件中就会生成 styleable 类。里面包含所有属性。attr 定义或者声明属性。注意,这边有两种方式
2022-07-10 21:45:05 705
转载 macOS 替换 Homebrew 源
Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程。它拥有安装、卸载、更新、查看、搜索等很多实用的功能,通过简单的一条指令,就可以实现包管理,十分方便快捷。Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。......
2022-07-10 21:41:19 249
原创 Android 动态获取 Resource ID
Android 开发中,当需要获取资源文件 ID 的时候,会按照下面的方式获取:但是如果有一组相似的图片,名称也很相似。比如电量图标,ic_battery_0,ic_battery_1,ic_battery_2,…,ic_battery_100。那么如果要根据电量值显示对应的图标的话,不管是 if else 还是 switch case,都需要写很多代码。如果用动态 Resource ID 的话,就会方便多了,下面介绍下做法...
2022-07-04 21:30:56 1651
原创 Android Canvas - StaticLayout 绘制多行文字
Canvas.drawText 只能绘制一行文字,文字多了会超出屏幕之外。要想绘制多行文字,可以使用 StaticLayout。
2022-07-04 21:29:38 993
原创 Android Canvas - saveLayer() & restoreToCount()
说起 saveLayer() & restoreToCount(),不得不先说 save() & restore()。saveLayer 和 save 相似,但是又有区别。
2022-07-03 14:24:03 916
原创 Android Canvas - save() & restore()
这有什么用呢?当调用 save 保存了画布的状态之后,就可以对画布为所欲为了(调用 Canvas 的平移、放缩、旋转、错切、裁剪等操作),反正可以调用 restore 恢复状态不是吗?save 和 restore 一般配套使用。......
2022-07-03 01:22:57 1382
原创 conda 常用命令
Anaconda 指的是一个开源的 Python 发行版本,其包含了 Python、conda 等 180 多个科学包及其依赖项。这个定义可能有点抽象,可以这样理解,Anaconda 提供了一个 Python 环境,并且已经替你下载好了很多常用的包(包括 jupyter notebook),省去了自行下载的麻烦。...
2022-07-02 23:17:43 341
原创 Android NDK(五)- ndk-stack 还原堆栈信息
native 的崩溃相比于 java 很难看懂,对于排查问题很不利。不过我们可以通过 NDK 中的工具 ndk-stack 来还原堆栈信息。
2022-06-26 15:38:01 1243
原创 Android NDK(一)- 认识 NDK
NDK 以及 JNI 的简单介绍,并通过一个 NDK Sample 简单了解 Android 中 JNI 的开发流程。
2022-06-18 16:17:13 450
原创 Android Jetpack - ViewModel
◾︎简介ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。举个例子:在 MVP 中,Activity/Fragment 调用 P 层的异步请求。由于 P 层要持有 Activity/Fragment 的引用用于回调接口,当 Activity/Fragment 销毁后,造成内存泄露。为此,必须做大量的工作去管理异步请求。而 ViewModel 不持有 Activity/Fragment 的引用,不存在上述问题。ViewModel 的 UI 更新是通过观察者模式(LiveData)
2021-09-14 22:26:00 244
原创 Android Jetpack - LiveData
◾︎简介LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。这是官网上的一段话。意思就是 LiveData 的更新能够被 LifecycleOwner 所感知,但是前提是 LifecycleOwner 处于活跃状态。这样就有效的避免了更新 UI 时 Activity 已
2021-09-14 22:21:14 675
原创 Android Jetpack - Lifecycles
◾︎简介Lifecycles 是一个持有组件生命周期状态(如 Activity、Fragment)信息的类,并允许其他对象观察此状态。可以帮助我们方便的管理 Activity 和 Fragment 的生命周期。通过使用 Lifecycles 组件,可以将依赖组件的代码从生命周期方法移入组件本身中。有助于写出更有条理且往往更精简的代码,这样的代码更易于维护。生命周期的状态和事件如下图本文代码使用 Kotlin 讲解,若需查看 Java 代码写法,请参考文末 Sample◾︎添加依赖def li
2021-09-14 22:14:07 260
原创 Atom 常用快捷键
功能 快捷键 新建窗口 Windows : Ctrl + Shift + N macOS : Command + Shift + N 新建文件(标签) Windows : Ctrl + N macOS : Command + N 打开文件 Windows : Ctrl + O macOS : Command + O 打开文件夹 ...
2018-03-10 12:00:53 1912
原创 Android Material Design 之 Palette
简介Palette 即调色板。从图片中提取颜色,然后赋给相应的视图,使界面看起来更加协调好看。简单使用首先添加相应的依赖implementation 'com.android.support:palette-v7:26.0.0'Android Studio 3.0 开始新建项目默认使用 implementation 了,当然 compile 也能用。我们给 Layout 文件添加一个 ImageVi
2017-08-26 13:01:56 870
原创 Android Material Design 之 CardView
前言Material Design 推荐使用卡片布局,详情可以参照 https://material.io/guidelines/components/cards.html#简单使用下面我们使用 RecyclerView + CardView 来实现一个简单的 Sample。首先添加相应的依赖implementation 'com.android.support:appcompat-v7:26.0.
2017-08-19 18:48:25 1872
原创 Android Material Design 之 BottomNavigationView
概述BottomNavigationView 是 MD 风格的底部导航视图,也是比较常见的视图之一。 详细可以参照 MD 的官方文档 https://material.io/guidelines/components/bottom-navigation.html#bottom-navigation-style简单实现首先添加 design librarycompile 'com.android.s
2017-08-12 22:38:25 1595
原创 Android Material Design 之 NavigationView
DrawerLayout在讲 NavigationView 之前,我们先来回顾一下 DrawerLayout。 DrawerLayout 是抽屉导航控件,在 v4 包中。(Android Studio 创建项目时会自动加入 v7 包,而 v7 包是包含 v4 包的,所以不需要再导入 v4 包了)布局文件<?xml version="1.0" encoding="utf-8"?><android.
2017-08-09 23:20:55 1015
原创 Android Material Design 之 CoordinatorLayout + CollapsingToolbarLayout
前言Material Design 中有一种效果,向上滑动的时候折叠 Toolbar,向下滑动的时候展开 Toolbar(这里的向上和向下是手势方向,下文中也一样,不再重复说明)。具体效果可以参考下面的链接。 https://material.io/guidelines/patterns/scrolling-techniques.html#scrolling-techniques-behavior
2017-08-06 22:18:09 946
原创 Android Material Design 之 CoordinatorLayout + AppBarLayout
前言Material Design 中有一种效果,向上滑动的时候隐藏 Toolbar,向下滑动的时候显示 Toolbar(这里的向上和向下是手势方向,下文中也一样,不再重复说明)。具体效果可以参考下面的链接。 https://material.io/guidelines/patterns/scrolling-techniques.html#scrolling-techniques-behavior
2017-08-06 22:16:25 1039
原创 Android Material Design 之 CoordinatorLayout + FloatingActionButton
https://material.io/guidelines/components/snackbars-toasts.html#snackbars-toasts-usage 中的 Don’t block the floating action button 部分,当 SnackBar 显示的时候,FloatingActionButton 跟着一起往上移动。下面来看看怎么实现。首先添加 design
2017-08-06 22:15:20 1034
原创 Android Material Design 之 CoordinatorLayout
什么是 CoordinatorLayout官方文档是这么描述的 CoordinatorLayout is a super-powered FrameLayout CoordinatorLayout is intended for two primary use cases: 1. As a top-level application decor or chrome layout
2017-08-06 22:14:41 754
原创 Android Material Design 之 Toolbar
前言从 Android 3.0 开始,推出了 ActionBar。但是,随着版本的升级,ActionBar 的行为也发生了变化。从 5.0 开始,ActionBar 提供了 Material Design 的体验。但是想要 5.0 之前的系统也支持 Material Design 怎么办呢?那么就用 Toolbar 吧!Toolbar 在 Support Library 中,所有对应的系统版本都能有
2017-07-25 23:09:56 970
原创 Android Material Design 之 TabLayout
Material Design 中的 Tab 设计可以参考官方文档 https://material.io/guidelines/components/tabs.html#tabs-usage ,其中的 Tab 部分 Support Library 提供了专门的控件 TabLayout。TabLayout 的简单使用布局文件的定义如下:<?xml version="1.0" encoding="ut
2017-07-24 22:57:48 1081
原创 Android CheckBox setButtonDrawable(null) 在 4.x 版本中无效
当我们需要只显示 CheckBox 的文字,而不显示按钮的时候,通常在 XML 文件中设置 CheckBox 的 android:button=”@null”。当我们自定义 CheckBox 并希望在代码中控制按钮不显示的时候,可以 setButtonDrawable(null) 来达到效果。但是有一个问题,setButtonDrawable(null) 在 4.x 中是没有效果的,从 5.0 开始
2017-07-19 22:08:45 1548
原创 Android Material Design 之 TextInputLayout
TextInputLayout 是 Material Design 风格的输入框。效果如下。EditText 在获取焦点的时候,hint 会作为 title 移动到上面去,这样用户输入的过程中也能看到 hint。TextInputLayout 自带 Error Message,当发生错误的时候,消息显示到线的下方,并且线的颜色也会变掉。EditText 只要用 TextInputLayout 包裹一
2017-07-19 22:07:53 1064
原创 关于 Android NumberPicker 的两个问题
使用 NumberPicker 的过程中发现两个问题 1. NumberPicker 的 setFormatter 对第一个显示的 Item 没有效果。 2. NumberPicker 没有提供接口去修改它的 Design。NumberPicker 的 setFormatter 对第一个显示的 Item 没有效果numberPicker.setMinValue(0);numberPicker.
2017-07-19 22:06:40 2683
原创 Android 自定义 EditText 达到从右边输入的效果
背景最近项目要求可以输入体重,而且小数点是自动输入的,不需要用户输入。这样就带来一个问题,体重的整数位可以是两位,比如 60.5,也可以是三位,比如 100.5,如果单位是 g,也可以是四位,比如 1000.5。那么小数点自动输入的话,是在第二位整数后面输入?还是在第三第四位整数后面输入?这个根本没有办法判断!所以 UX 提出了一个方案:小数点固定为两位,输入时从右边开始输入。举个例子:如果想输入
2017-07-19 22:05:29 3507
原创 Android DataBinding (六) EditText 绑定 TextChangedListener 和 FocusChangeListener
XML 如下设定<EditText ...... app:addTextChangedListener="@{vm.textWatcher}" app:onFocusChangeListener="@{(view, hasFocus) -> vm.setText(((EditText)view).getText().toString(), hasFocus)}" />View
2017-07-19 21:57:47 9420 1
原创 Android DataBinding (五) 自定义 View 的双向绑定
前言自定义 View 的时候如果用到非系统定义的属性的时候,如果要实现双向绑定,不是用了 @= 就行的,自定义 View 中还需要一些设置。下面通过一个例子来说明自定义 View 的双向绑定的实现。例子要求: 1. 通过 RadioButton 来选择爱好(爱好的选项是:吃饭 / 睡觉 / 打豆豆) 2. 画面加载的时候显示初始的爱好值(将 ViewModel 里设好的值传到 RadioButt
2017-07-16 00:33:10 14254 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人