学习 Android,我觉得有几个点需要注意
第一点:需要找到合适的学习方法。
第二点:需要有一个好的学习环境。
第三点:就是需要掌握一些必要的知识和技能。下面我将从这几个方面进行分享:
什么是 Android?
Android是英文“Android”的中文译名。Android系统是基于 Linux内核开发的,它由谷歌公司推出并提供了完整的开发环境,包括 Android操作系统、 Java虚拟机、运行时环境、开发工具包等。
什么是安卓
安卓是基于 Linux内核开发的开放源代码的移动操作系统,它最大的特点就是具有跨平台性。目前安卓已经成为全球最大的移动操作系统。使用安卓可以将手机上已有的应用移植到手机上。
Android系统采用开源原则,基于 Linux内核开发,它主要有以下几个特点:
- 跨平台性: Android系统可以在 Windows平台、 Linux平台以及 iOS平台上运行;
- 开放性: Android系统为用户提供了多种编程语言和开发环境,用户可以根据自己的兴趣选择相应语言进行开发;
- 安全性: Android系统采用了C++语言进行编程,这样可以保证程序能够在安全的环境下运行;
- 跨平台性:由于安卓系统是基于 Linux内核开发,所以其具有跨平台性。用户可以在多种操作系统上运行应用程序。不过对于一些大型的应用程序来说, Android系统只能运行在一种操作系统上。
概述:
·基于Linux的、开放源代码的操作系统。
·由Google和【开放手机联盟】领导及开发。
·2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建【开放手机联盟】共同研发改良Android系统。
·Google以【Apache开源许可证】的授权方式,发布了Android的源代码。
1.1编程语言
安装android-studio
1.JDK的下载
Android Studio是谷歌官方提供的Android开发工具,集成了各种工具和库,可帮助您轻松构建高质量的Android应用程序。
2. SDK
Android SDK包含了您需要构建Android应用程序的全部工具和库。
打开Android Studio,并从欢迎屏幕中选择“Configure”>“SDK Manager”。
在SDK Manager窗口中,选择“SDK Platforms”选项卡,并确保您已安装了所需的Android版本。
选择“SDK Tools”选项卡,确保您已安装所需的工具,例如Android SDK Build-Tools和Android Emulator。
点击“Apply”按钮,以保存所做的更改并自动下载并安装任何缺少的组件。
完成这些步骤后,您的Android SDK已经配置好了,您可以开始使用Android Studio进行开发和测试应用程序
2.1学习书籍可以参考下这本:《Android编程入门教程》
3.1 熟悉IDE
我们在之前的课程也用到过了ide,
所以安装的过程就剩了很多时间,直接打开就可以使用了
res 目录
android项目的各种资源文件,比如layout存放界面布局文件 values目录下存放各种xml格式的资源文件
例如字符串资源文件:Strings.xml
颜色资源文件:colors.xml
3.1.1Activity的启动和结束
从当前页面跳到新页面,startActivity
从当前页面回到上一个页面,finish
如图所示,新建chapter03这一模块,
新建活动activity_start,设置第一个页面
然后在java代码中设置监听器,设置点击按钮之后的事件
在finish第二个页面中设置往前返回的按钮和相关代码
打开就是start,关闭就是close
4.1新建一个activity
名称为:CalculatorActivity
,
如图所示:
MainActivity.java文件如下:
package com.example.androidtext;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button zero, one, two, three, four, five, six, seven, eight, nine, dian, btn_del;
// 定义加减乘除按钮
private Button add, min, mul, div;
// 定义等号按钮
private Button equals;
// 标识符,标识运算完成
private Boolean buttonC = false;
private Button btn_C;
// 清除按钮
private EditText srgc, scjg;
// 定义输入过程和结果
boolean equals_flag = false;
@Override
protected void onCreate(Bundle saveInstanceStace) {
super.onCreate(saveInstanceStace);
setContentView(R.layout.activity_calculator);
// 小数点加减乘除,等于,清除回退
zero = findViewById(R.id.button0);
one = findViewById(R.id.button1);
two = findViewById(R.id.buttontwo);
three = findViewById(R.id.button3);
four = findViewById(R.id.button4);
five = findViewById(R.id.button5);
six = findViewById(R.id.button6);
seven = findViewById(R.id.button7);
eight = findViewById(R.id.button8);
nine = findViewById(R.id.button9);
dian = findViewById(R.id.buttondian);
btn_C = findViewById(R.id.buttonC);
btn_del = findViewById(R.id.buttonDEL);
//设置按钮监听
zero.setOnClickListener(this);
one.setOnClickListener(this);
two.setOnClickListener(this);
three.setOnClickListener(this);
four.setOnClickListener(this);
five.setOnClickListener(this);
six.setOnClickListener(this);
seven.setOnClickListener(this);
eight.setOnClickListener(this);
nine.setOnClickListener(this);
dian.setOnClickListener(this);
btn_del.setOnClickListener(this);
btn_C.setOnClickListener(this);
add = findViewById(R.id.buttonjia);
min = findViewById(R.id.buttonjian);
mul = findViewById(R.id.buttoncheng);
div = findViewById(R.id.buttonchuyi);
add.setOnClickListener(this);
min.setOnClickListener(this);
mul.setOnClickListener(this);
div.setOnClickListener(this);
equals = findViewById(R.id.buttondengyu);
equals.setOnClickListener(this);
//输入框,输出框
srgc = findViewById(R.id.gc);
scjg = findViewById(R.id.jg);
}
@Override
public void onClick(View view) {
// getText()获取的内容是一个对象,所以要转换一下
String str = srgc.getText().toString();
String out = scjg.getText().toString();
// 根据当前按钮按下的id进行判断
switch (view.getId()) {
case R.id.button0:
case R.id.button1:
case R.id.buttontwo:
case R.id.button3:
case R.id.button4:
case R.id.button5:
case R.id.button6:
case R.id.button7:
case R.id.button8:
case R.id.button9:
case R.id.buttondian:
if (equals_flag) {
srgc.setText(null);
scjg.setText(null);
equals_flag = false;
srgc.setText(((Button) view).getText());
} else {
srgc.setText(str + ((Button) view).getText());
}
// 把现在的内容追加上,现在的内容来自于按钮的文本
// 按钮这个view对象先转换为Button
buttonC = false;
break;
case R.id.buttonjia:
case R.id.buttonjian:
case R.id.buttoncheng:
case R.id.buttonchuyi:
// 如果标识符为真,让值为空
if (equals_flag) {
equals_flag = false;
//(3) 点了等号运算之后,再点运算符和数字连续操作,如1 + 2 = 3 + 4 = 7
srgc.setText(out + " " + ((Button) view).getText() + " ");
} else {
srgc.setText(str + " " + ((Button) view).getText() + " ");
}
if (buttonC)
str = "";
if (str.contains("+") || str.contains("-") || str.contains("*") || str.contains("/"))
// 从起始位置开始,我们只要运算符之前的内容
str = str.substring(0, str.indexOf(" "));
// 所以在运算符的前面和后面都追加一个“ ”
srgc.setText(str + " " + ((Button) view).getText() + " ");
buttonC = false;
break;
case R.id.buttondengyu:
equals_flag = true;
//只按“=”不起任何作用
if (!(srgc.getText().toString().length() > 0)) {
break;
} else {
getResult();
srgc.setText(scjg.getText().toString());
}
break;
case R.id.buttonC:
srgc.setText(null);
scjg.setText(null);
break;
case R.id.buttonDEL:
//(2) 只按“=”不起任何作用
if (str.length() > 0) {
srgc.setText(str.substring(0, str.length() - 1));
} else {
scjg.setText(null);
srgc.setText(null);
}
break;
}
}
// 点了等号运算之后,重新点数字,需要清除输入框内容,如1 + 2 = 3(结果框显示3),再点4 + 5 = 9(结果框显示9)
private void getResult() {
if (srgc.length() > 0) {
double result;
// 获取到字符串
String exp = srgc.getText().toString();
// 按照空格分隔字符串,形成字符串数组,第一个元素是左侧操作数,第二个元素是运算符,第三个元素是右侧操作数
String[] exp_arr = exp.split(" ");
// 定义结果
double cnt = 0;
int cnt1 = 0;
if (!exp_arr[0].equals("") && !exp_arr[2].equals("")) {
// 定义操作数
double d1 = Double.parseDouble(exp_arr[0]);
double d2 = Double.parseDouble(exp_arr[2]);
// 判断运算符
if (exp_arr[1].equals("+"))
cnt = d1 + d2;
else if (exp_arr[1].equals("-"))
cnt = d1 - d2;
else if (exp_arr[1].equals("*"))
cnt = d1 * d2;
else if (exp_arr[1].equals("/"))
cnt = d1 / d2;
//(1) 简写小数(如0.03简写.03,需要后台处理)
scjg.setText(String.valueOf(cnt));
if (!exp_arr[0].contains(".") && !exp_arr[2].contains(".") && !exp_arr[1].equals("/")) {
cnt1 = (int) cnt;
scjg.setText(cnt1 + "");
} else {
scjg.setText(cnt + "");
}
//(2) 首次只输入了“运算符 数字 等于”,如: + 4 =,则返回:0 + 4
} else if (exp_arr[0].equals("")) {
double d2 = Double.parseDouble(exp_arr[2]);
if (exp_arr[1].equals("+")) {
scjg.setText(d2 + "");
}
//(5) 只输入“数字 运算符 等于”,如:9 * =,则返回:9 * 9 = 81
} else if (exp_arr[2].equals("")) {
double d1 = Double.parseDouble(exp_arr[0]);
if (exp_arr[1].equals("+")) {
result = d1 + d1;
scjg.setText(result + "");
} else if (exp_arr[1].equals("-")) {
result = d1 - d1;
scjg.setText(result + "");
} else if (exp_arr[1].equals("*")) {
result = d1 * d1;
scjg.setText(result + "");
} else {
result = d1 / d1;
scjg.setText(result + "");
}
}
// 设置结果
//除数不能为0
if (!exp_arr[0].equals("0") && exp_arr[1].equals("/") && exp_arr[2].equals("0")) {
scjg.setText("除数不能为0");
}
}
}
}
4.1.2在activity_calculator.xml
中定义布局,注意线性垂直布局,
使用滚动视图
ScrollView
,初始框架为:其中TextView、TextView、GridLayout分别对应计算器界面的名称、输入和结果显示框、4x5的按钮布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Calculator">
<EditText
android:id="@+id/gc"
android:layout_width="match_parent"
android:layout_height="78dp"
android:layout_row="0"
android:layout_column="0"
android:ems="10"
android:hint="计算过程"
android:inputType="textPersonName" />
<EditText
android:id="@+id/jg"
android:layout_width="434dp"
android:layout_height="65dp"
android:layout_row="1"
android:layout_column="0"
android:ems="10"
android:hint="显示结果"
android:inputType="textPersonName" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="771dp"
android:columnCount="4"
android:rowCount="5">
<Button
android:id="@+id/buttonC"
android:layout_width="200dp"
android:layout_height="62dp"
android:layout_columnSpan="2"
android:rowCount="3"
android:text="C" />
<Button
android:id="@+id/buttonDEL"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="DEL" />
<Button
android:id="@+id/buttonchuyi"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="/" />
<Button
android:id="@+id/button7"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="7" />
<Button
android:id="@+id/button8"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="8" />
<Button
android:id="@+id/button9"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="9" />
<Button
android:id="@+id/buttoncheng"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="*" />
<Button
android:id="@+id/button4"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="4" />
<Button
android:id="@+id/button5"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="5" />
<Button
android:id="@+id/button6"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="6" />
<Button
android:id="@+id/buttonjian"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="-" />
<Button
android:id="@+id/button1"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="1" />
<Button
android:id="@+id/buttontwo"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="2" />
<Button
android:id="@+id/button3"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="3" />
<Button
android:id="@+id/buttonjia"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="+" />
<Button
android:id="@+id/buttonyuliu"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="预留" />
<Button
android:id="@+id/button0"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="0" />
<Button
android:id="@+id/buttondian"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="." />
<Button
android:id="@+id/buttondengyu"
android:layout_width="100dp"
android:layout_height="65dp"
android:text="=" />
</GridLayout>
</LinearLayout>
4.1.3网格布局为5行4列,
然后完善每个按钮,如下图所示:
然后更改manifest
,将主界面显示为计算机界面,
SDK必须要更新
·build tools 必须;
·SDK Tools 必须;
·SDK Platform-tools 必须;
·Android Support 强烈建议安装;
·SDK Platform 必须至少安装一个版本;
·System Image 建议安装;
·SDK Samples 建议安装;
5.BroadcastReceiver广播的简单用例
5.1、创建广播接收器类:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理接收到的广播
}
}
5.2、在AndroidManifest.xml文件中注册广播接收器:
<receiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android.intent.action.MY_BROADCAST"/>
</intent-filter>
</receiver>
5.3、发送广播:
Intent intent = new Intent("android.intent.action.MY_BROADCAST");
sendBroadcast(intent);
在这个示例中,我们注册了一个广播接收器来处理名为“android.intent.action.MY_BROADCAST”的广播。然后我们使用Intent来发送这个广播,最后我们的广播接收器会执行onReceive()方法来处理广播。
6.1个人总结
在安卓的开发中,首先学习了安卓的主资源布局控件,然后在学习到了java代码所使用的逻辑知识。从开始的单用布局activity_main再到后面的MainActivity,学习到了许多知识,但是我的自学能力和自觉性还是不够强,始终无法学习到非常精妙的程度,适配器也还是不够熟练,在暑假的时候,我希望我更能系统化的学习安卓这门课程!