
【Android】
文章平均质量分 67
teletian
任何事情都是在实现的过程中才最有趣!
展开
-
Android 10 分区存储
以前,Android 开发者习惯在根目录建一个自己应用的文件夹,用于存放应用的数据。这样会导致用户卸载后,应用数据不会随之删除。导致手机文件特别混乱,长期占用空间,而且容易泄露用户隐私。其实 Android 早就提供了 getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir() 等 API 供开发者使用,但是开发者为了方便,没有去用。原创 2022-09-17 08:23:31 · 10039 阅读 · 1 评论 -
Android RadioGroup clearCheck() 的一个坑
通过debug,发现clearCheck之后,如果有RadioButton被选中,回调onCheckedChanged会被调用两次。今天在通过RadioGroup的clearCheck方法将所有的RadioButton设置为非选中的时候,发现怎么也不行。两次的checkedId分别是-1和选中的那个RadioButton的id。可以在clearCheck之前先把回调置空,然后clearCheck之后再设回来。如何避免选中的id被回调?...原创 2022-07-18 21:32:32 · 1248 阅读 · 0 评论 -
Android LayoutInflater 的一个坑
这样的话,如果要对添加的View做操作,可以传入false,最后再通过addView添加到容器中去。通过调查发现,最后一个参数传true和false,返回的View是有差别的。然后对view设置LayoutParams的时候,怎么也不起效果。最后一个参数传了true,就是想偷懒,省去addView的操作。...原创 2022-07-18 21:31:50 · 458 阅读 · 0 评论 -
Android 反编译 Apk
使用 apktool 反编译 apk原创 2022-07-16 17:38:25 · 198 阅读 · 0 评论 -
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 · 3626 阅读 · 0 评论 -
Andorid 自定义 View - 自定义属性 - 属性重复导致冲突
先来看一个自定义属性重复的例子:attrs.xml这样会报错如下:解决办法也很简单,把相同的属性抽出来定义就可以。原创 2022-07-12 19:35:53 · 640 阅读 · 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 · 717 阅读 · 0 评论 -
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 · 1729 阅读 · 0 评论 -
Android Canvas - StaticLayout 绘制多行文字
Canvas.drawText 只能绘制一行文字,文字多了会超出屏幕之外。要想绘制多行文字,可以使用 StaticLayout。原创 2022-07-04 21:29:38 · 1059 阅读 · 0 评论 -
Android Canvas - saveLayer() & restoreToCount()
说起 saveLayer() & restoreToCount(),不得不先说 save() & restore()。saveLayer 和 save 相似,但是又有区别。原创 2022-07-03 14:24:03 · 958 阅读 · 0 评论 -
Android Canvas - save() & restore()
这有什么用呢?当调用 save 保存了画布的状态之后,就可以对画布为所欲为了(调用 Canvas 的平移、放缩、旋转、错切、裁剪等操作),反正可以调用 restore 恢复状态不是吗?save 和 restore 一般配套使用。......原创 2022-07-03 01:22:57 · 1423 阅读 · 0 评论 -
Android NDK(五)- ndk-stack 还原堆栈信息
native 的崩溃相比于 java 很难看懂,对于排查问题很不利。不过我们可以通过 NDK 中的工具 ndk-stack 来还原堆栈信息。原创 2022-06-26 15:38:01 · 1330 阅读 · 0 评论 -
Android NDK(四)- JNI 注册 Native 方法
JNI 的注册方式。静态注册和动态注册。原创 2022-06-24 21:37:12 · 651 阅读 · 0 评论 -
Android NDK(三)- JNI 异常
JNI 异常的使用原创 2022-06-24 21:36:04 · 656 阅读 · 0 评论 -
Android NDK(二)- JNI 基础
JNI 的一些基础知识原创 2022-06-18 16:22:58 · 593 阅读 · 0 评论 -
Android NDK(一)- 认识 NDK
NDK 以及 JNI 的简单介绍,并通过一个 NDK Sample 简单了解 Android 中 JNI 的开发流程。原创 2022-06-18 16:17:13 · 472 阅读 · 0 评论 -
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 · 273 阅读 · 0 评论 -
Android Jetpack - LiveData
◾︎简介LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。这是官网上的一段话。意思就是 LiveData 的更新能够被 LifecycleOwner 所感知,但是前提是 LifecycleOwner 处于活跃状态。这样就有效的避免了更新 UI 时 Activity 已原创 2021-09-14 22:21:14 · 725 阅读 · 0 评论 -
Android Jetpack - Lifecycles
◾︎简介Lifecycles 是一个持有组件生命周期状态(如 Activity、Fragment)信息的类,并允许其他对象观察此状态。可以帮助我们方便的管理 Activity 和 Fragment 的生命周期。通过使用 Lifecycles 组件,可以将依赖组件的代码从生命周期方法移入组件本身中。有助于写出更有条理且往往更精简的代码,这样的代码更易于维护。生命周期的状态和事件如下图本文代码使用 Kotlin 讲解,若需查看 Java 代码写法,请参考文末 Sample◾︎添加依赖def li原创 2021-09-14 22:14:07 · 294 阅读 · 0 评论 -
Android DataBinding (二) 事件处理
DataBinding 的事件处理有两种方法 1. 方法引用 2. Listener 绑定方法引用通常会定义一个 Handler 或者 Presenter 类,并定义一个和 Listener 的方法签名一样的方法,然后再 xml 中调用。public class MyHandlers { public void onClick(View view) { ... }}<TextView原创 2017-07-16 00:29:54 · 3268 阅读 · 0 评论 -
Android DataBinding (三) Observable
BaseObservableViewModel 的值变化之后,如果需要画面做相应的刷新,那么可以继承 BaseObservable。private static class User extends BaseObservable { private String firstName; private String lastName; @Bindable public Stri原创 2017-07-16 00:31:01 · 2733 阅读 · 0 评论 -
Android DataBinding (四) 自定义属性
前言DataBinding 的时候,会调用 View 的,setXxx 方法。比如下面代码<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.name}" />绑定的时候,会调用 setText(String text)原创 2017-07-16 00:31:56 · 5356 阅读 · 0 评论 -
Android DataBinding (五) 自定义 View 的双向绑定
前言自定义 View 的时候如果用到非系统定义的属性的时候,如果要实现双向绑定,不是用了 @= 就行的,自定义 View 中还需要一些设置。下面通过一个例子来说明自定义 View 的双向绑定的实现。例子要求: 1. 通过 RadioButton 来选择爱好(爱好的选项是:吃饭 / 睡觉 / 打豆豆) 2. 画面加载的时候显示初始的爱好值(将 ViewModel 里设好的值传到 RadioButt原创 2017-07-16 00:33:10 · 14388 阅读 · 2 评论 -
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 · 9488 阅读 · 1 评论 -
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 · 1105 阅读 · 0 评论 -
Android Material Design 之 Snackbar
概述Snackbar 是一个类似于 Toast 的用来显示消息的条状控件。和 Toast 的不同之处在于,Toast 是在屏幕下方偏上一点的位置弹出来;而 Snackbar 是从屏幕下方弹出来,并显示在屏幕底部。代码代码和 Toast 类似RelativeLayout rootLayout = (RelativeLayout) findViewById(R.id.root_layout);Snac原创 2017-06-12 17:57:10 · 662 阅读 · 0 评论 -
Android Material Design 之 Floating Action Button
概述Floating Action Button 简称 FAB,是一个悬浮的圆形按钮,带有阴影(MD 的设计思想就是呈现真实世界的效果,是包含灯光和阴影的)。这个设计很棒! FAB 的详细介绍可以参照 https://material.io/guidelines/components/buttons-floating-action-button.html 。FAB 代码详解首先需要引入 Desig原创 2017-06-12 16:44:10 · 977 阅读 · 0 评论 -
Android Material Design 之 Material Theme
Android 5.0 开始可以定义 Material Theme 了。Material Theme 可以定义为以下 3 种Theme.Material(深色版本)Theme.Material.Light(浅色版本)Theme.Material.Light.DarkActionBar(浅色版本,深色 Action Bar)但是 Android 5.0 之前的版本怎么办呢?v7 Support原创 2017-06-12 15:39:57 · 993 阅读 · 0 评论 -
Android_利用 adb 命令把电脑和 Android 手机通过 WIFI 进行连接,从此安装应用不需要数据线
通过USB连接手机和电脑执行命令adb tcpip 5555,这个命令可以将手机的adbd程序以WIFI模式再启动,如果看到restarting in TCP mode port: 5555,则启动成功。 如果有多个手机,可以执行adb devices查看手机ID,然后在adb后面跟上 -s <手机ID> 接着执行命令adb connect <手机ip>:5555 到这边就已经建立了WIFI原创 2016-03-16 22:47:43 · 6892 阅读 · 5 评论 -
Android Canvas 绘图之 PorterDuffXfermode
本文参照 http://blog.youkuaiyun.com/iispring/article/details/50472485概述类 Android.graphics.PorterDuffXfermode 继承自 android.graphics.Xfermode。当绘图时和前面的图案有重叠部分,为了设置重叠规则,需要用到 PorterDuffXfermode,需要将将其作为参数传给 Paint.setX转载 2017-05-05 17:43:42 · 769 阅读 · 0 评论 -
Android DataBinding (一) 基本用法
概述2015 年的 I/O 大会上,Google 发布了官方的数据绑定框架 Data Binding Library,使得官方原生支持 MVVM。Data Binding 是把数据直接绑定到 XML 文件上,并能实现自动刷新。Data Binding 减少了代码的耦合性,一些如 findViewById、setText 之类的操作都可以通过绑定实现。环境配置环境配置非常简单,只要在 build.gr原创 2017-07-16 00:29:00 · 7212 阅读 · 0 评论 -
Android 自定义 EditText 达到从右边输入的效果
背景最近项目要求可以输入体重,而且小数点是自动输入的,不需要用户输入。这样就带来一个问题,体重的整数位可以是两位,比如 60.5,也可以是三位,比如 100.5,如果单位是 g,也可以是四位,比如 1000.5。那么小数点自动输入的话,是在第二位整数后面输入?还是在第三第四位整数后面输入?这个根本没有办法判断!所以 UX 提出了一个方案:小数点固定为两位,输入时从右边开始输入。举个例子:如果想输入原创 2017-07-19 22:05:29 · 3533 阅读 · 0 评论 -
关于 Android NumberPicker 的两个问题
使用 NumberPicker 的过程中发现两个问题 1. NumberPicker 的 setFormatter 对第一个显示的 Item 没有效果。 2. NumberPicker 没有提供接口去修改它的 Design。NumberPicker 的 setFormatter 对第一个显示的 Item 没有效果numberPicker.setMinValue(0);numberPicker.原创 2017-07-19 22:06:40 · 2717 阅读 · 0 评论 -
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 · 886 阅读 · 0 评论 -
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 · 957 阅读 · 0 评论 -
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 · 1064 阅读 · 0 评论 -
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 · 1051 阅读 · 0 评论 -
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 · 761 阅读 · 0 评论 -
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 · 1030 阅读 · 0 评论 -
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 · 1619 阅读 · 0 评论