みなさん、こんにちは。この記事では、読者の役に立つことを願って、一般的な Android 開発スキルを引き続き紹介していきます。
1. スタックからシステムのバージョンをすばやく見つけます
ここでは主に、問題スタックから現在のシステム バージョンをすばやく見つけるための 2 つのテクニックを共有します。
1. 現在のシステム バージョンが Android 10 未満であるか、Android 10 以降であるかをすばやく識別します。
まず、Android 10 以降では新しいサービス Service: が導入されActivityTaskManagerService
、ActivityMangerService
元の機能の一部が前者に分割されるため、関連する単語が質問スタックに表示される場合はActivityTaskManagerService
、Android 10 以降である必要があります。
Android9以下のソースコードにはこのクラスは存在しません。
2. 現在のシステム バージョンが Android 12 未満であるか、Android 12 以降であるかをすぐに識別します。
これを信頼する必要があります。Android12 のソースコードをLooper
示します。Looper
メッセージを配布する Looper のコア メソッドが、処理のためloop()
に転送されるようになりますloopOnce()
。これは Android 12 以降に固有であり、Looper はメッセージを処理する Android の必要な部分です。これは、問題スタックのソース祖先です。続く:
したがって、このテクニックは非常に必要であると考えられています。問題スタックからこのメソッドが表示されると、それは Android12 である必要があります。loopOnce()
2. ボタンの間隔を実現する派手な方法
最近新しいプロジェクトのコードを読んだところ、ボタン間の距離、ボタンとプロジェクトの上下の距離が実現されていることが分かりました。今まで知らなかった方法を使ったので、ここで共有します。みんなに見てもらう。
TextView と画面上部の間の距離を設定する例を次に示します。初期の効果は次のとおりです。
次に、段階的に変換を行ってみましょう。
1. まず、TextView にはカスタム XML 背景があります。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:height="70dp"
android:gravity="center_vertical">
<shape>
<solid android:color="#ff0000" />
</shape>
</item>
</layer-list>
核心就是定义了android:height
和android:gravity
这两个属性,来确保我们自定义背景在组件中的高度及居中位置。
2. 其次将布局中TextView
的属性调整下:
- 首先
height
属性一定要调整为wrap_content
,保证最后TextView按钮的高度的测量最终取minHeight
设置的属性值和背景设置的高度这两者的最大值;
- 其次还要设置
minHeight
最小高度属性,注意一定要比背景设置的高度值大,保证能和屏幕顶部产生边距效果;
- 最后要设置字体的位置为垂直居中,保证字体位置和背景不发生错位;
经过上面处理,效果就出来了:
其实上下空白的部分都是属于TextView,设置点击事件也会被响应,这算是其中的缺点之一,当前也可能在业务场景中认为这是一种合理表现。
上面实现的逻辑和TextView的测量逻辑密不可分,感兴趣的同学可以看下这块代码,这里就不带大家进行一一分析了:
三. logcat快速查看当前跳转的Activity类信息
忘了是在哪里看到的了,只要日志过滤start u0
,就可以看到每次跳转的Activity信息,非常的有帮助,既不需要改动业务层,也不需要麻烦的安装一些插件啥的。
使用时记得将logcat右边的过滤条件置为,否则你就只能在左边切换到系统进程去看了:
这里我们演示下效果:
1. 跳转到Google浏览器
logcat界面会输出:
会打印一些跳转到包名类名等相关信息。
2. 跳转到系统设置界面
logcat输出:
可以说start u0
还是相当好用的。
四. 项目gradle配置最好指向同一本地路径
最近开发中经常存在需要一次性检索多个项目的场景,而这样项目的gradle版本都是相同的,没啥区别。但每打开一个项目就得重新走一遍gradle下载流程,下载速度又是蜗牛一样的慢。
所以强烈建议大家,本地提前准备好几个gradle版本,然后通过设置将项目的gradle指向本地已存在好的gradle:
这样项目第一次打开的速度将是非常快的,而且按道理来说相同gradle版本的项目指向同一本地路径,也可以实现缓存共享。猜的。
如果项目好好的编译运行着,突然没网了,可能会提示一些找不到依赖库资源啥的,其实你本地都已经缓存好依赖库资源了,只需要设置下off-mode,不走网络直接通过本地资源编译运行即可:
总结
本篇文章主要是介绍了Android开发一些技巧,感觉都是项目中挺常用到的,算是我最近一个月收获的吧,后续准备研究研究compose了,毕竟看到大家们都在搞这个,羡慕的口水都流了一地了哈哈。