【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.
相关文章
|
8月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
269 3
|
8月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
834 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
8月前
|
缓存 Unix Android开发
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
Android安卓项目调试之Gradle 与 Gradle Wrapper的概念以及常用gradle命令深度详解-优雅草卓伊凡
892 8
|
8月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
754 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
8月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
1004 6
|
缓存 安全 开发工具
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
Android 解决bug:Android studio 运行、编译项目时导致电脑死机
1595 0
|
Android开发
Android Studio在android Emulator中运行的项目黑屏
Android Studio在android Emulator中运行的项目黑屏
959 0
Android Studio在android Emulator中运行的项目黑屏
|
Android开发 开发者 Windows
Android Studio运行项目
一、在真机上运行(Mac没得) 二、Android Studio自带模拟器(AVD)安装以及运行项目 三、在模拟器上运行
848 0
Android Studio运行项目
|
移动开发 Java API
android studio虚拟机运行react-native项目全流程(避坑笔记)
android studio虚拟机运行react-native项目全流程(避坑笔记)
android studio虚拟机运行react-native项目全流程(避坑笔记)
|
开发工具 Android开发
装X式的阅读代码,无需开启Android Studio来运行项目
这篇博文主要是给自己做个笔记,木有啥技术可言,也是方便自己在阅读代码的时候省去繁重的AS带来卡卡的感觉。 这篇博文是stormzhang大神那参考来的,很久就久仰大名了,今天没事逛了下他的博客,写的很全面,还有一些代码之外的问题探讨,让自己开阔了不少眼界,继续follow学习 现在,我们手上什么都没有,接下来,我们来一步一步的实现 随便找一个github上面的源码
2568 0

热门文章

最新文章