【Android】构建安卓项目过程中的一些细节问题全记录

简介: 前言 距离安卓项目结束已经过去了好几天,之后很长一段时间我应该都不会再写和安卓有关的项目了。今天偶然翻到之前写的笔记,想了想还是决定整理出来,希望对后来要完成课设的学弟学妹们有帮助。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

前言

距离安卓项目结束已经过去了好几天,之后很长一段时间我应该都不会再写和安卓有关的项目了。今天偶然翻到之前写的笔记,想了想还是决定整理出来,希望对后来要完成课设的学弟学妹们有帮助。

(因为课设用到的一些包、组件都是旧的,而且不允许用框架,必须写原生Java或者Kotlin,所以以下一些经验不适用于实际项目开发。)

构建原生安卓应用

  • 不希望图标在res目录下的每个文件夹都出现一次的话就用 vector assert
  • 在newInstance()里面new了fragment之后记得setArgument并且在oncreate()里面get(官方模板写法由来),否则可能会在旋转屏幕时触发空指针异常

image.png

  • 官方推荐使用FragmentContainerView关联activity和fragment。

有两种方式,一是静态添加到xml文件。

image.png

二是动态添加,在xml文件中不要指明目标的最后一行,在activity中首次创建实例时再动态添加。

  • Gradle每次都会下载哪怕是同一版本的文件:即使是同一版本,gradle-wrapper.jar的url路径也不同(是由哈希方法产生的),基数会在32~36之间变化:

private String getHash(String string) {
    try {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        byte[] bytes = string.getBytes();
        messageDigest.update(bytes);
        return new BigInteger(1, messageDigest.digest()).toString(36);
    } catch (Exception e) {
        throw new RuntimeException("Could not hash input string.", e);
    }
}
  • xml文件中,为什么会同时出现android:和tools:后接同一个属性?

tools可理解为是预览界面用的。
改了tools后的相关属性,在split或者design那里能立即看到效果,但是它在app正式运行的时候不会存在。android:则相反,正在写界面时看不到,但是正式运行时以它为准。

  • 为安卓应用添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET"/>

!!! 注意!!! 没有搜索结果第一条写的尾标签。不要被误导了!!!

  • RecyclerView:展示尽可能多的内容的同时,使消耗内存尽可能小

原理:当下滑屏幕的时候,上面的view的空间没有被destroy,而是被重新利用以显示当前的。(有种即时渲染的意味)

列表(或网格)中每个单独的元素由viewholder定义,viewholder创建之初是不含数据的,是recyclerview将数据绑定到上面。这个viewholder用于定义列表项的功能表现。

要为viewholder配一个适配器(重写以下三个方法:onCreateViewHolder()、onBindViewHolder()、getItemCount())

  • 想要在xml页面中包含另一页面部分(如导航栏),可以用类似以下的写法

(即复用组建的时候不需要重复粘贴代码,include即可)


<include layout="@layout/layout_bottom_navigation_view"/>
  • 从网上找了个组件库,用上去之后发现4年前已经停止维护了,该库封装的组件的某个方法已于今年被弃用,大家用组件库的时候一定要看清楚啊!

勘误:官方文档显示:
BottomNevigationView中,被弃用的是:setOnNavigationItemReselectedListener和setOnNavigationItemSelectedListener,截至目前应该换成setOnItemSelectedListener,网上有些文章好像说反了。

  • 底部导航栏配合fragment使用有三种方式:

    • FrameLayout + FragmentTransaction
    • ViewPager
    • 配合nevigation
  • activity转换为fragment只需要注意以下三点转换:

    1. 将activity的onCreate()中的代码放到fragment的OnCreateView()
    2. 将原来的下述表达修改为下下述:
 super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set);
  View view = View.inflate(getActivity(),R.layout.fragment_set,null);
3.将原来的this替换为getActivity()
4.在原来的findViewById前加上view.
相关文章
|
29天前
|
安全 Android开发 iOS开发
Android vs. iOS:构建生态差异与技术较量的深度剖析###
本文深入探讨了Android与iOS两大移动操作系统在构建生态系统上的差异,揭示了它们各自的技术优势及面临的挑战。通过对比分析两者的开放性、用户体验、安全性及市场策略,本文旨在揭示这些差异如何塑造了当今智能手机市场的竞争格局,为开发者和用户提供决策参考。 ###
|
14天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
42 6
|
23天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
48 5
|
23天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
41 2
|
28天前
|
开发工具 Android开发 iOS开发
Android vs iOS:构建移动应用时的关键考量####
本文深入探讨了Android与iOS两大移动平台在开发环境、性能优化、用户体验设计及市场策略方面的差异性,旨在为开发者提供决策依据。通过对比分析,揭示两个平台各自的优势与挑战,帮助开发者根据项目需求做出更明智的选择。 ####
|
29天前
|
人工智能 Android开发
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
1024 云上见 构建AI总结助手,实现智能文档摘要 领罗马仕安卓充电器
61 1
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
898 0
|
Android开发
Android Studio在android Emulator中运行的项目黑屏
Android Studio在android Emulator中运行的项目黑屏
750 0
Android Studio在android Emulator中运行的项目黑屏
|
Android开发 开发者 Windows
Android Studio运行项目
一、在真机上运行(Mac没得) 二、Android Studio自带模拟器(AVD)安装以及运行项目 三、在模拟器上运行
653 0
Android Studio运行项目
|
移动开发 Java API
android studio虚拟机运行react-native项目全流程(避坑笔记)
android studio虚拟机运行react-native项目全流程(避坑笔记)
android studio虚拟机运行react-native项目全流程(避坑笔记)