综合工程设计选题开发一款安卓web浏览器,最开始选择的是微信小程序的一个识别啥的功能,但是个人不喜欢微信小程序,微信小程序感觉过于卡顿,操作艰涩,也不太喜欢机器学习,并且对安卓开发这一全新领域有些许好奇,于是怂恿组员们一起改为安卓开发。大家也认为都行,所以成功改弦易辙了。。
虽然后续还是因为毕设的原因苦学了机器学习sad
刺探老师的意思是开发浏览器本身是有许多组件调用可以很容易完成的,需要我们增添一些新的功能。然而我还完全不会走,更不谈跑了,因而打算整理博客较为全面地学习、记录以下从零开始的安卓开发学习流程。
12月4日开坑 3号周五才勉勉强强完成毕设的每周汇报
安卓开发技术
开发环境
操作系统为 Ubuntu 20.04.2, Android Studio(2021.3.1)等
第一个APP
参考博客 Android Studio入门级教程(详细)【小白必看】 CSDN
熟悉Android Studio(以下简称ASArm Slave?雾)的基本操作。
在xml文件中,控件的id格式十分奇怪,学习于
android布局中的@+id和@id的区别可知, @+id/value
与@id/value
是两种为资源标号的方式,其中R.java文件会自动生成,用于定义安卓程序各类型资源的索引。@+id
方式检查R.java文件,如果存在value这个值则直接使用,不然则创建一个新的值;@id
则仅仅会引用已存在的值,如果不存在则编译报错。
activity_main.xml
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout 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
10 <Button
11 android:id="@+id/bt_echo"
12 android:layout_width="wrap_content"
13 android:layout_height="wrap_content"
14 android:text="echo" />
15
16 <EditText
17 android:id="@+id/input"
18 android:layout_width="150dp"
19 android:layout_height="wrap_content"
20 android:hint="Input something" />
21
22 <TextView
23 android:id="@+id/output"
24 android:layout_width="wrap_content"
25 android:layout_height="wrap_content" />
26
27</LinearLayout>
MainActivity.java
1package com.example.mainapplication;
2
3import androidx.appcompat.app.AppCompatActivity;
4
5import android.os.Bundle;
6import android.view.View;
7import android.widget.EditText;
8import android.widget.TextView;
9import android.widget.Button;
10
11
12public class MainActivity extends AppCompatActivity {
13 private EditText mEditText; //用于输入内容
14 private Button mButton; //按键
15 private TextView mTextView; //用于显示内容
16 @Override
17 protected void onCreate(Bundle savedInstanceState) { //重写打开函数
18 super.onCreate(savedInstanceState);
19 this.setContentView(R.layout.activity_main);
20
21 mTextView = (TextView)findViewById(R.id.output); //绑定组件和变量
22 mButton = (Button) findViewById(R.id.bt_echo);
23 mEditText = (EditText) findViewById(R.id.input);
24
25 mTextView.setText("Hello World!"); //起始时设为“Hello World!“
26 mButton.setOnClickListener(new View.OnClickListener() { //按键事件响应
27 @Override
28 public void onClick(View v) {
29 mTextView.setText(mEditText.getText().toString()); //显示输入内容
30 }
31 });
32 }
33}
这些组件的简单结合能够在用户点击按钮的时候将输入框的内容回显到一条文本框中。
不是很懂布局方式,所以选择了垃圾的线性布局。也不会换行,凑和着作为第一个程序。
项目结构
单个APP项目下主要有manifest、java和res等文件夹,其中manifest定义了一些全局的信息,java存储各类java文件完成业务逻辑,而res存储各类资源文件(图片,音频等以及XML文件)。
View 控件
安卓APP中,所有的用户界面元素都是由View或者ViewGroup构成的。ViewGroup可以包含View也可以包含另一个ViewGroup,从而组成了一个有层次的树型结构。
我们可以在代码中初始化View实例,但是最简单、高效地方式是编辑XML文件,XML用一个标签即可代表一个View。当APP加载XML布局资源时,安卓会帮助我们将布局文件中的每个节点实例化为一个个对象。
布局
安卓中有6大布局,分别是: LinearLayout(线性布局),RelativeLayout(相对布局),TableLayout(表格布局) FrameLayout(帧布局),AbsoluteLayout(绝对布局),GridLayout(网格布局),下面将进行说明。
线性布局
LinearLayout 是一个视图组,用于使所有子视图在单个方向(垂直或水平)保持对齐,可以使用android:orientation
属性指定布局方向。
线性布局中所有的子视图依次堆叠,并且会考虑子视图之间的边距以及每个子视图的对齐方式。
此外可以使用 android:layout_weight
来为子视图划分权重,以使得他们能够按照重要程度分配到不同的空间。
杂谈
9图片
后缀名有.9
的图片(如pic.9.png)在图片拉伸的时候特定的区域不会发生图片失真,如圆角矩形类图片需要该技术。