安卓
分享最新安卓开发技术,专注Kotlin
蓝不蓝编程
厦门大学计算机专业|前华为工程师
展开
-
用十种编程语言开发秒表应用-第一篇-安卓
用十种编程语言开发秒表应用安卓Kotlin (安卓App)安卓Kotlin+JetPack Compose(安卓App)Swift (iOS应用,采用SwiftUI)Dart(Flutter应用,跨平台,适用安卓、ios、mac、windows、web)微信小程序抖音小程序鸿蒙 (Java版)鸿蒙 (ArkUI版)Js+Html+Vue(H5应用)Js+Html+Vue+ElementUI(H5应用)安卓Kotlin开发工具Android Studio如何下载工程截图原创 2021-12-22 22:37:44 · 1942 阅读 · 0 评论 -
模仿UC浏览半屏显示push消息过来的网页
背景不少浏览器在显示push消息时,采用半屏显示,顶部会露出一截,同时页面支持上下滑动,下滑还可以关闭页面。下面是UC浏览器的效果:我实现的效果实现方案方案一:继承FrameLayout,覆写事件处理方法,然后把WebView当做子View放到里面。方案二:继承WebView,覆写事件处理方法。方案一代码class WebViewDragLayout : FrameLayout { private var downY: Float = 0f private var ha原创 2021-11-06 14:18:44 · 257 阅读 · 0 评论 -
Kotlin中使用Timer
目标在kotlin中使用Timer执行定时任务.解决方案class MainActivity : AppCompatActivity() { lateinit var timer: Timer override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSt...原创 2020-04-27 20:03:11 · 11538 阅读 · 0 评论 -
安卓监控ContentProvider数据变化
背景有个业务场景需要实时知道ContentProvider中的数据变化。实现方案1、在自定义的ContentProvider中,当数据变化时,指定通知调用。override fun update( uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int { val result = dbHelper.update("user_table",原创 2021-10-16 10:50:11 · 298 阅读 · 0 评论 -
用十种编程语言开发计算器应用-第十一篇-华为鸿蒙
用十种编程语言开发计算器应用C语言C#(windows桌面软件)Swift (ios应用)pythonDart(Flutter应用,跨平台,适用安卓、ios、mac、windows、web)Java(安卓App)Kotlin (安卓App)Js+Html+Vue(H5应用)微信小程序抖音小程序鸿蒙鸿蒙版开发工具DevEco Studio如何下载工程截图关键代码文件ability_main.xml 主界面布局MainAbilitySlice.java 主界面对原创 2021-10-12 22:18:51 · 902 阅读 · 0 评论 -
安卓监控ContentProvider数据变化
背景有个业务场景需要实时知道ContentProvider中的数据变化。实现方案1、在自定义的ContentProvider中,当数据变化时,指定通知调用。override fun update( uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int { val result = dbHelper.update("user_table",原创 2021-10-11 22:22:25 · 341 阅读 · 0 评论 -
如何让安卓模拟器不要内嵌在AndroidStudio里?
问题现象最新版本的AndroidStudio支持模拟器内嵌在里面,但是不知道怎么让他自己出来。解决办法打开设置,找到下面设置,去掉勾选,然后重启AndroidStudio即可。哈哈,终于出来了。关于我厦门大学计算机专业|华为八年高级工程师十年软件开发经验,5年编程培训教学经验目前从事编程教学,软件开发指导,软件类毕业设计指导。所有编程资料及开源项目见https://cxyxy.blog.csdn.net/article/details/120405881...原创 2021-09-27 21:50:45 · 1388 阅读 · 0 评论 -
用十种编程语言开发计算器应用-第四篇-Kotlin
用十种编程语言开发计算器应用C语言C#(windows桌面软件)Swift (ios应用)pythonDart(Flutter应用,跨平台,适用安卓、ios、mac、windows、web)Java(安卓App)Kotlin (安卓App)Js+Html+Vue(H5应用)微信小程序抖音小程序安卓Kotlin语言版开发工具Android Studio如何下载工程截图关键代码文件HspActivity.kt 主ActivityCalculator.kt 计算器原创 2021-09-20 22:32:37 · 1049 阅读 · 1 评论 -
用十种编程语言开发计算器应用-第二篇-Java语言
用十种编程语言开发计算器应用C语言C#(windows桌面软件)Swift (ios应用)pythonDart(Flutter应用,跨平台,适用安卓、ios、mac、windows、web)Java(安卓App)Kotlin (安卓App)Js+Html+Vue(H5应用)微信小程序抖音小程序安卓Java语言版开发工具Android Studio如何下载工程截图关键代码文件HspActivity.java 主ActivityCalculator.java 计原创 2021-09-20 22:08:12 · 791 阅读 · 0 评论 -
集成bugly升级极简教程
添加依赖在app工程的build.gradle文件中添加如下依赖implementation 'com.tencent.bugly:crashreport_upgrade:1.5.23'添加权限修改Manifest文件,添加如下权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.INT原创 2021-09-17 22:31:58 · 549 阅读 · 0 评论 -
安卓ViewBinding详解
背景之前我们通过Kotlin Android Extensions来访问布局文件中的元素,但是这个现在被废弃了,原因如下:空安全:res下的任何id都可以被访问,有可能因访问了非当前Layout下的id而出错兼容性:只能在kotlin中使用,java不能用局限性:不能跨模块使用访问布局中元素方法findViewByIdButterKnifeDataBindingKotlin Android ExtensionsViewBindingViewBinding2019年Google原创 2021-08-18 12:07:59 · 1442 阅读 · 2 评论 -
如何避免Toast多次点击后一直提示
背景安卓开发中有时会遇到这样的场景,因为后台调用接口报错或者其他原因,导致toast不停的弹出来,体验很差。解决方案写个工具类,如果toast对象存在,就复用,只是去改变里面显示的内容。class Util { private static Toast toast; public static void showToast(Context context, String content) { if原创 2021-03-16 10:36:46 · 598 阅读 · 1 评论 -
通过反射修改第三方Activity
背景项目中使用了第三方的Activity,但是要定制一下界面,隐藏或修改界面的一些元素。而这些元素在Activity中有定义属性,只是设置为private了,导致外界无法访问到。解决方案继承该Activity,通过反射获取属性,并进行修改。样例:第三方Activity界面如下:修改后界面:主要代码:第三方activity代码:public class OriginalActivity extends AppCompatActivity { private Button b原创 2021-03-16 10:36:09 · 618 阅读 · 0 评论 -
关于集成腾讯tbs浏览word、pdf等文件出现app首次启动无法查看问题
问题描述安卓客户端中集成了腾讯tbs,用来查看word、pdf等文件。但是首次安装app后,打开文档时,总是无法打开。具体的问题点在调用TbsReaderView的preOpen接口时,返回false,导致无法继续打开文件。使用的tbs版本为:tbs_sdk_thirdapp_v4.3.0.1020_43633_sharewithdownload_withoutGame_obfs_20190111_105200.jar解决方案升级至腾讯tbs最新版。附录https://x5.tencent.原创 2021-01-15 16:17:18 · 2115 阅读 · 0 评论 -
解决Andriod P及以上反射调用系统API时出现弹框问题
现象原因Android P开始,限制了对系统API通过反射进行调用。 如果发生了,就会弹出上面的弹框。解决方案根本解决方案不要通过反射调用系统API。规避方案如果不能根治,可以先屏蔽掉这个弹框。app初始化时调用下面这个函数即可。private void closeAndroidPDialog(){ try { Class aClass = Class.forName("android.content.pm.PackageParser$Pack原创 2021-01-14 16:26:27 · 924 阅读 · 1 评论 -
解决华为手机debug5秒左右自动断连的问题
问题描述华为手机debug时,一会儿就会断开连接(大约5秒),导致几乎无法debug。解决方案进入debug状态后,手机立刻锁屏再解锁。参考资料https://blog.csdn.net/qq_28898075/article/details/106091832原创 2020-12-07 19:53:21 · 1959 阅读 · 0 评论 -
AS报错:platform ‘android-28‘ not found.
问题描述Android Studio编译报错:platform ‘android-28’ not found.解决方案打开设置,选择“System Settings》Android SDK”勾选对应sdk,点击ok即可。原创 2020-12-03 19:18:32 · 1479 阅读 · 0 评论 -
安卓解决BottomNavigationView菜单多于3个时不显示文字问题
问题描述试用BottomNavigationView时,如果底部的菜单项多于3个时,除第一个外都只显示图标,而不显示文字。下图中,上一张为有问题的效果图,下一张预期效果图。解决方法bottomNavigationView.labelVisibilityMode = LabelVisibilityMode.LABEL_VISIBILITY_LABELED参考https://blog.csdn.net/dhl_1986/article/details/93493732...原创 2020-11-26 14:24:01 · 1124 阅读 · 0 评论 -
底部导航栏BottomNavigationView+Fragment
效果图主要代码添加依赖implementation 'com.google.android.material:material:1.2.1'布局文件:activity_main.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.原创 2020-11-25 17:27:19 · 405 阅读 · 0 评论 -
打印安卓手机上已安装应用名称和包名
方法/** * 打印手机上安装的应用名称和包名 */private fun printAppNameAndPackageName() { val pm = packageManager val list = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES) for (packageInfo in list) { val appName = packageInfo.applicati原创 2020-11-24 11:02:38 · 520 阅读 · 0 评论 -
安卓通过InputFilter限制EditText输入
目标限制EditText输入,最多允许三位小数,最大1000000.解决方案private fun editTextFilter(context: Context): InputFilter { //最大允许输入的数 val maxValue = 1000000 //最多保留几位小数 val maxCountAfterDot = 3 return object : InputFilter {原创 2020-11-19 17:19:53 · 635 阅读 · 0 评论 -
解决安卓启动页图片拉伸问题
背景不少App启动时,会出现长时间白屏,为了避免白屏的不悦体验,一方面肯定是提升启动速度,另一方面则是提供一个启动页面,让画面感填充无聊的等待.解决方案新建SplashActivityclass SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) start原创 2020-11-10 18:11:52 · 1779 阅读 · 1 评论 -
徒手撸一个好玩的App:美图
简介做一个可以看妹子的App.主要特性支持浏览图片,支持上下翻页支持收藏图片效果图技术点Retrofit+okHttp:访问网络接口获取数据Coroutines:异步调用ViewPager2:进行翻页Glide:显示图片Room:操作sqLite数据库记录和读取数据BottomNavigationView: 底部导航栏Recyclerview:显示列表代码目录截图完整源代码https://gitee.com/cxyzy1/browse-beauty...原创 2020-11-10 11:41:04 · 18320 阅读 · 0 评论 -
徒手撸一个好玩的App:随机选择图片
简介做一个从多张图片中随机选择一张的App.主要特性支持倒计时支持网络下载图片支持改变图片背景框颜色支持动画显示图片效果图下载地址https://gitee.com/cxyzy1/select-beauty/raw/master/apk/app7-debug.apk技术点协程Coroutines:用于执行网络调用及界面更新Retrofit:获取网络数据Glide:加载图片流式布局FlowLayout:用于自动换行显示任意数量子控件本地相册选择(ImageSelecto原创 2020-11-09 18:19:31 · 2661 阅读 · 0 评论 -
安卓使用TabLayout制作顶部导航栏
效果图主要代码主界面MainActivity.ktclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewPager.adapter = Main原创 2020-11-07 15:24:30 · 635 阅读 · 0 评论 -
ViewPager添加删除数据后刷新页面方法
问题在使用ViewPager时,删除数据后,界面未刷新,数据仍在. 如通过ViewPager浏览照片,浏览到某张时,进行删除,调用notifyDataSetChanged()后也不刷新.解决方案覆写PagerAdapter的getItemPosition方法 /** * 覆写此函数,才能使得删除数据后UI及时刷新 */ override fun getItemPosition(obj: Any): Int { return POSITION_NONE原创 2020-11-05 19:46:39 · 803 阅读 · 0 评论 -
安卓使用RecyclerView一行显示多条数据
背景平常使用RecyclerView时,都是一行一行显示数据,但是某些场景下,我们需要一行显示多条数据.效果图实现方案适配器class RvAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() { private var mDataList = mutableListOf<String>() private lateinit var mContext: Context overrid原创 2020-11-05 19:21:16 · 2738 阅读 · 2 评论 -
安卓ViewPager2监听页面切换事件
目标监听ViewPager2里的页面切换事件.解决方案vp2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { //xxx }})原创 2020-11-03 13:55:59 · 14596 阅读 · 2 评论 -
BottomNavigationView + Fragment 实现底部导航栏
目标实现底部导航栏效果图主要代码布局文件: activity_main.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="matc原创 2020-10-30 18:28:33 · 453 阅读 · 0 评论 -
安卓支持手势缩放图片
背景显示图片时,希望支持手势缩放图片.解决方案添加依赖 implementation 'com.github.chrisbanes:PhotoView:2.3.0'使用<com.github.chrisbanes.photoview.PhotoView android:layout_width="match_parent" android:layout_height="match_parent" android:src="@mipmap/ic_lau原创 2020-10-30 16:32:01 · 344 阅读 · 0 评论 -
安卓中使用Retrofit 请求字符串接口(非JSON数据)
背景接口返回的数据不是json格式的,而是普通字符串,那平常的retrofit调用方式就有问题了.解决方案添加依赖 implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'2.修改retrofit构造类,采用ScalarsConverterFactory作为转换器private fun getNetworkService(): NetworkService { val okHttpClient = OkHt原创 2020-10-30 16:27:50 · 706 阅读 · 0 评论 -
协程Coroutines实现并发和串行两种操作
背景一般情况,我们使用协程,是将异步变成同步,操作就都变成了串行的了,但是有些界面需要调用调用多个接口,而且还需要等所有接口完成后再做某个动作.那该怎么办呢?下面的样例为串行调用:launch { val resp1 = service.query1() resp1?.let { view.xx1() } val resp2 = service.query2() resp2?.let { view.xx2() } //等所有接口调用完毕后执行如下操作}解原创 2020-10-30 14:53:16 · 1452 阅读 · 1 评论 -
如何一键制作全套安卓logo图
目标制作安卓App需要的全套logo图工具AndroidStudio详细操作步骤右键,选择菜单“New>Image Asset”点击Path后的图标,选择本地图片3.选择完图片后,一路Next到家即可.原创 2020-10-29 17:39:09 · 694 阅读 · 0 评论 -
安卓自定义倒计时控件
用途实现倒计时效果.效果图主要代码class CountDownTextView(context: Context, attrs: AttributeSet? = null) : AppCompatTextView(context, attrs) { private var mOnFinishCallback: OnFinishCallback? = null private var startNum = 10 private var endNum = 1原创 2020-10-29 10:08:28 · 458 阅读 · 0 评论 -
ScrollView嵌套GridView/Listview,Scrollview总是滚动到GridView/Listview的位置问题
问题描述布局中采用了ScrollView内嵌GridView,界面刷新时,总是会出现ScrollView自动滚动到GridView的位置.解决办法方法一:页面初始化的时候,设置isFocusable属性.gridView.isFocusable = falsePS:需要在代码里设置,而不能在布局文件中通过属性设置(经实测,设置无效).2. 方法二定制GridViewclass LabelGridView : GridView { constructor(context:原创 2020-10-28 19:35:58 · 344 阅读 · 0 评论 -
Execution failed for task ‘:zz:transformClassesAndResourcesWithProguardForRelease‘
背景debug版本编译正常,release版本编译报错.编译报错日志Warning: can't write resource [META-INF/businessframe_release.kotlin_module] (Duplicate zip entry [6.jar:META-INF/businessframe_release.kotlin_module])Warning: can't write resource [META-INF/core_release.kotlin_module]原创 2020-10-26 17:27:09 · 417 阅读 · 0 评论 -
如何让文本居右对齐,换行后又居左对齐
效果图一般做出来的效果预期效果图(差别在第二张)预期效果: 文字单行居右对齐,多行居左对齐.实现方案让目标文本控件内居左对齐在目标控件外围套一层相对布局,占满横向空间,让文本控件在相对布局中居右显示 .<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:i原创 2020-10-24 17:34:11 · 1778 阅读 · 0 评论 -
Kotlin打印方法执行耗时
fun main() { val timeCost = measureTimeMillis { test() } println("耗时:$timeCost")}fun test() { sleep(500)}原创 2020-10-23 14:05:36 · 2161 阅读 · 0 评论 -
安卓流式布局FlowLayout样例
用途让布局里的控件自动换行效果图使用方法添加依赖implementation 'com.nex3z:flow-layout:1.3.1'代码<com.nex3z.flowlayout.FlowLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_paren原创 2020-10-20 19:20:44 · 553 阅读 · 0 评论 -
安卓中如何实现左滑菜单
效果图特性支持左滑和右滑显示一个菜单项,尚不支持更灵活的方式.主要代码class SlideLayout(context: Context?, attrs: AttributeSet? = null) : HorizontalScrollView(context, attrs) { private lateinit var mLeftMenu: ViewGroup private lateinit var mRightMenu: ViewGroup private原创 2020-10-16 18:04:43 · 867 阅读 · 0 评论