Android

分类下相关文章

对您的 AdMob 帐号设置了临时性的广告投放限制

早上起床收到一封 Google Admob 的邮件: 对您的 AdMob 帐号设置了临时性的广告投放限制 我们会继续评估您的流量,并自动审核和更新此限制。通常,广告投放限制对发布商的影响不会超过 30 天,但在某些情况下,影响时间可能会更长。很遗憾,我们无法确定具体需要多长时间。 在此期间,您的帐号仍然可以正常使用,您可以在合作规范中心查看这一帐号级问题的详细信息。 登录 Google Admob 后台会看到醒目的提示: 广告投放受到限制 您可以展示的广告数量受到限制。要了解详情,请前往合作规范中心。 悲剧了,这个月好不容易挤出来时间上线了两个 Android APP,看来是没法赚广 ...

阅读全文...

更好用的 Android 项目 I18N 翻译编辑器

在给 Android APP 做多国语言翻译时,感觉 Anroid Studio 内置的 I18N 翻译编辑器还是不好用。 因为我都是用的 Google 翻译,所以需要一个单词一个单词的复制进去,效率极低。 我想写一个效率更高的翻译编辑器客户端。 需求 翻译复用 自动填写翻译,与google同步 或者google导出的翻译格式,自动解析成对应的项目配置文件 没有翻译的自动填充英文 技术选型 tampermonkey 自动提取 Google 翻译 python 自动操作 strings.xml 文件 扩展 web 端各框架 ...

阅读全文...

Google Play Android App 卸载率高的原因分析

最近新开发了一个 Android App,在 Google Play 上发布,应用商店了翻译了 40+ 语言,但是应用内只翻译了中文和英文,想先看看 Google Play 的搜索效果。 观察了两天,搜索效果比预期要好,转化率也挺高。 但是出现了一个非常严重的问题,就是卸载率接近 100% ... 卸载率高的原因分析 应用内没有对应翻译。 前期安装用户,多来自于小语种用户,集中在南美,例如巴西。 而巴西用户的主要语言葡萄牙语,并没有加应用内翻译。 我猜测,用户可能看不懂英文导致卸载。 解决方案 先补充应用内翻译。 先行补充了三门语言 葡萄牙语。针对巴西市场。 日语 韩语 再发布一版,顺便加 ...

阅读全文...

Android 按钮样式区分,使用内置 Material Design 样式

背景 经常会遇到在 Android 界面中需要添加两个并排的按钮,例如: 一个确定按钮 一个取消按钮 两个按钮需要有颜色的区分,能明显分辨出 Primary, Secondary 的属性。 每次都现找颜色,是非常浪费时间的事情。所以我需要一套主题。 而 Google 的 Material Design 恰好为 Android 的主题而生。 首先添加依赖 https://github.com/material-components/material-components-android/blob/master/docs/getting-started.md implementation 'c ...

阅读全文...

Type mismatch: inferred type is Double? but Double was expected

写了一段 Android Koltin 的代码,做浮点数计算。但是编译时报错: Type mismatch: inferred type is Double? but Double was expected 出错的代码如下,出错是 try body 那行: fun calc(a: Double?, b: Double?, c: Double?): String { var result = 0.0 try { result = a * b / c } catch (e: Exception) { ...

阅读全文...

Android Kotlin 编译时提示警告 Parameter 'view' is never used

例如,下面一段响应点击事件的 Android Kotlin 代码: fun clickResetBtn(view: View) { binding.x1.setText("") } 在编译时,会看到警告信息: Parameter 'view' is never used 解决方法 使用 @Suppress("UNUSED_PARAMETER") fun clickResetBtn(@Suppress("UNUSED_PARAMETER")view: View) { binding.x1.setText(&quot ...

阅读全文...

Android Studio 4.1.3 编译报错 INSTALL_PARSE_FAILED_NO_CERTIFICATES

在新安装的 Android Studio 4.1.3 上编译以调试 APP 时,报错: 04/17 19:58:39: Launching 'app' on No Devices. Installation did not succeed. The application could not be installed: INSTALL_PARSE_FAILED_NO_CERTIFICATES List of apks: [0] 'D:\work\some_android_app\app\build\outputs\apk\debug\app-debug.apk' APK signature ...

阅读全文...

在 RecyclerView 条目数超过一屏时,下拉滚动导致 checkbox 状态混乱

Bug 现象 陪媳妇在医院生二娃的时候,用自己新开发的一个 Todo 管理的 Android App 记录待办事宜。当待办事项列表条目很多,超过一屏,此时下拉滚动查看更多事项,会发现这些待办事项的完成状态发生错乱。并且引发我的壁纸生成机制被频繁触发,功能失效。。。 由于记录的事情太多也很重要,引起极度不适,气得我差点卸载,给自己 Google Play 上 1 星差评。 导致 checkbox 状态混乱的原因 为了节省内存,RecyclerView 滚动时,会将移出可视范围、不可见的条目做回收。 如果条目中 (View Holder)包含 CheckBox,在回收时,会自动将 CheckBox ...

阅读全文...

Android Fragment 顶部工具栏显示回退按钮

场景 一个 Main Activity,多个 Fragment 组成的 Android App。 界面1,列表页:list fragment 界面2,详情页:detail fragment 当列表页进入详情页时,想在 fragment 顶部的 toolbar 看到回退按钮。 kotlin 实现代码 由于这里的 toolbar 输入 Main Activity,所以在 Activity 里添加: private lateinit var appBarConfiguration: AppBarConfiguration override fun onCreate(savedInstanceS ...

阅读全文...

Android 11: IntentService is deprecated

使用 IntentService 实现了一个耗时的功能,但是 Android Studio 编译时警告: IntentService is deprecated 官方文档 https://developer.android.google.cn/reference/android/app/IntentService This class was deprecated in API level 30. IntentService is subject to all the background execution limits imposed with Android 8.0 (API le ...

阅读全文...

Android EditText 输入框设置自动焦点

在 Android App 的新建页面,我想将输入焦点自动设置到第一个输入框上,这样就省去用户点击的麻烦。 在使用了 Data Binding 的情况下,kotlin 的写法: binding.editTextTitle.requestFocus() ...

阅读全文...

Android Activity 中点击 action bar 按钮,跳转 Settings Fragment

需求 想实现点击 app bar / action bar 上的一个按钮,跳转到设置功能页,即 Settings Fragment。 findNavController 实现跳转 由于 action bar 在 main activity layout 中,并不属于任何一个 fragment,所以需要在 activity 中实现。 参考 Fragment 中的 findNavController 用法: findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) 在 Activity 中使用 findNa ...

阅读全文...

Android App Bar / Action Bar 添加按钮

想要在 Android App 中添加一个配置页面,用来进行基本设置调整。例如: 修改字体大小 修改字体颜色 修改背景图片 对比了一下使用 BottomNavigationView 底部 tabbar 的方案,感觉还是 app bar 比较直观一些。 app bar 也称为 action bar,在界面顶部。新建 Basic Activity 时,自带功能。 https://developer.android.google.cn/training/appbar 将默认的折叠项显示出来 修改 menu xml 文件 <item android:id="@+id/action_ ...

阅读全文...

Android SQLite Union 对多个查询结果进行组合

例如,在 Android App 中,我想从本地 SQLite 数据库中,取所有未完成的任务,及已完成的任务的前50条。限制读取已完成条数是为了防止数据量过大,内存不可控。 Room 中的查询 SQL 在 DAO 代码中: @Query(""" SELECT * FROM ( SELECT * FROM (SELECT * FROM todos WHERE done = 0) UNION SELECT * FROM (SELECT * FROM todos WHERE done = 1 ORDER BY id DESC LIMIT 50) ) OR ...

阅读全文...

Android Room Entity 为某个字段添加索引

担心 Android 本地 SQLite 数据库存储数据过多时,造成查询效率下降,所以想给字段加上索引。 添加索引示例 例如,我想给待办事项这个表(todos)的完成状态字段(done)添加索引。 设置 indices 即可: @Entity( tableName = "todos", indices = [Index(value = ["done", ])] ) data class Todo( var title: String, var content: String, ) { @PrimaryKey(aut ...

阅读全文...