Android学习日记1——FirstProject

emmmm其实这篇博客应该是昨天写的,但是由于某人太懒了,所以只好拖到今天了。

在学习了一段时间的Java后,我深感只是单纯依靠记忆的知识是不靠谱的,必须在实践中学习。于是我开始学习Android开发。学习Android的目的很明确,一是参加国创(或者其他类型比赛),二是在参加这个比赛之前做一款App(目前有两个设想,一是西电全家桶,二是个人日程管理),三是积累工程项目经验。

在这里我先简述一下西电全家桶的设想。由于超级课程表实在是太慢了,而且作为一款商业软件不得已要加入很多广告,使得我们查看课程表的代价很高(时间上的),而且也加入了很多我们用不到的功能,很糟心。于是我设想做一款真正属于西电学子的App,通过它可以查课表、成绩、流量、水电等等。由于我目前才刚刚开始学习,所以我也不知道会遇见多大的阻力,不过可以确定的是,我需要学习Android开发(这部废话)以及服务器和数据库管理,当然我打算做出内测版之后邀请更同学一起来做。

在前声明,学习所用书籍为郭霖所编写的第一行代码(Android)第二版,Java学习所用资料为B站求知讲堂Java入门(av76235341)

在前生命,文章的所有内容均为自己学习感悟,初学者难免有不严谨的地方,如果您是小白不小心看到了这篇文章,emmmm看看就好,如果您是大佬emmmmm笑笑就好,还望您不吝赐教

文件目录

学习必要的环境搭建以及项目创建在此不再赘述,首先说一下项目创建后的目录。

项目创建后Android Studio会自动帮你生成很多文件,其中大部分是你不需要改动或者关心的。

Android Studio提供之至少两种文件视图模式(我只用到两种),一种是Project,一种是Android,分别如图:

 左侧为项目真实的目录结构,右侧为Android Studio转换过的目录结构,适合快速开发。

以左侧视图为例讲解

Project

当然这么多文件我也不知道有什么用,因为我也还没有用到,就目前我所知的来说一下吧:

  1. .gradle和.idea:Android Studio自动生成的一些文件,无需关心,不要编辑
  2. app:项目代码、资源存放目录,也是我们开发的主要目录
  3. build:也无需关系,项目编译时自动生成的一些文件
  4. ActivistyTest.iml:用于表示这是一个IntelliJ IDEA项目,无需修改(有一说一IntelliJ真NB)

app

其他的我也不是很了解了,下面详细说一下app里面的内容,如图:

  1. build:和外层build目录相似,也是一些编译文件,不过更加复杂,无需关心
  2. libs:第三方jar包(我也不知道是个什么东西,我理解的是应该和语言中的第三方库差不多)
  3. src : emmmm项目文件存放地,打开看看吧:

src
  1. java:存放Java代码的地方,所写的代码在这里存放
  2. androidTest:编写Android Test测试用例(我也不知道是什么),可以对项目进行自动化测试
  3. test:另一种自动化测试方式,Unit Test测试
  4. AndroidManifest.xml:Android项目的配置文件,类似于注册表(我是这么理解的,等以后学习更多了再来补充)
  5. res:所有的图片(drawable),布局(layout),字符串(values),图标(mipmap)都放在这里,(括号里面不是英文,而是它们存放的子目录),如图:
res

 具体文件

Android讲究逻辑和视图分离,在Java文件中编写逻辑,在res中存放视图资源,在活动中可以引用这些资源.引用的语法为:

R.string.name 在代码中
@string/name 在xml文件中

就比如一个简单的应用程序,界面只有一行字:"Hello World",其Java文件如下:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

MainActivity类继承了AppCompatActivity,Activity是Android系统提供的一个基类,AppCompatActivity是它的一个子类,代表这是一个兼容活动.项目中的所有活动都必须是它或者它的子类才能拥有活动的特性.

这里重写了一个方法:onCreate,这个方法在一个活动被创建时自动调用,这个方法的第二行调用了setContentView方法,为当前活动引入了一个activity布局,我们在res/layout目录下找到这个布局文件,打开如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context=".MainActivity">
 8 
 9     <TextView
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:text="Hello World!"
13         app:layout_constraintBottom_toBottomOf="parent"
14         app:layout_constraintLeft_toLeftOf="parent"
15         app:layout_constraintRight_toRightOf="parent"
16         app:layout_constraintTop_toTopOf="parent" />
17 
18 </androidx.constraintlayout.widget.ConstraintLayout>

在12行定义了一个text为"Hello World!",App中的显示的字符就是这一个,其他的我也不大清楚,不过"wrap_content"的意思时刚好包起来.

AndroidManifest.xml

打开这个文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.helloworld">
 4 
 5     <application
 6         android:allowBackup="true"
 7         android:icon="@mipmap/ic_launcher"
 8         android:label="@string/app_name"
 9         android:roundIcon="@mipmap/ic_launcher_round"
10         android:supportsRtl="true"
11         android:theme="@style/AppTheme">
12         <activity android:name=".MainActivity">
13             <intent-filter>
14                 <action android:name="android.intent.action.MAIN" />
15 
16                 <category android:name="android.intent.category.LAUNCHER" />
17             </intent-filter>
18         </activity>
19     </application>
20 
21 </manifest>

看第5~19行

icon为这个项目的应用图标,可以看到是引用的mipmap里面的ic_launcher文件,label为应用的名称,引用的string里面的app_name文件

注意到12~19行,这里对MainActivity活动进行了注册,里面有一个子标签<intent-filter>,里面的两行代码表示这是一个主活动,即打开App就是运行这个活动.

Log

最后再说一下Log方法(日志工具),自低级别到高级别如下:

  • Log.v(),verbose级别,打印琐碎的,意义最小的日志信息
  • Log.d(),debug级别,打印对调试程序和分析问题有帮助的信息
  • Log.i(),info级别,打印比较重要的信息,一些你想看到的,可以用来帮助分析用户行为的数据
  • Log.w(),warn级别,打印警告信息,提示程序潜在的风险
  • Log.e(),error级别,打印程序中的错误信息,一般用于程序出现严重问题,应当尽快修复

用法如下:

Log.d("MainActivity", "onCreate: execute");

这个方法有两个参数,tag和msg,标签和信息,里面的内容在语法上应该是不限定的,在实际应用中第一个一般填入当前类名,第二个是你想打印的内容,如该语句执行结果如下:

 方便快捷,时间什么的都打印出来了,岂不快哉?用什么System.out.println()

而且在Android Studio中输入logt,按下Tab键,自动帮你设置一个常量:

常量的值为当前类名,心动不如行动,快快使用吧!

(知宇过滤器什么的就不说了,自行摸索吧)

猜你喜欢

转载自www.cnblogs.com/RainCurtain/p/12213665.html