[1]dvm把所有的.class文件变成一个dex文件
[2]基于的架构不同
Android4.4以前——应用程序均在Dalvik Java的虚拟机上运行,每次程序运行需要将程序编译为机器码
Android4.4以前——新增ART模式,安装程序时,预编译一部分代码为机器码,这样更快更省电,代价是程序安装的内存变大
api guide大而全,一下子看进去细节太多,不容易学习,采用螺旋式学习比较好。
dx.bat 把所有.class文件变成了一个dex文件
aapt Android应用打包工具
adb Android调试桥
每新建一个控件,使用id属性为该控件在R文件中添加一个id
android:id="@+id/checkbox",则可在全局找到,“+”表示添加
高级控件(暂时不用管)
ListView(实现上下滚动)
RecyclerView
基本布局:
LinearLayout(线性布局,可指定垂直或水平排列)
RelativeLayout(相对布局,可指定控件的相对位置)
FrameLayout(帧布局,重叠)
TableLayout(表格,指定行列)
GridLayout
新增布局
PercentFrameLayout(百分比布局)
PercentRelativeLayout
新增布局的使用需要添加依赖:
打开app/build.gradle文件,在dependencies闭包中添加如下内容:
dependencies{
compile fileTree(dir:‘libs’,include:[’*.jar’])
compile’com.android.support:appcompat-v7:24.2.1’
compile’com.android.support:percent:24.2.1’
testCompile‘junit:junit:4.12’
布局文件:
<RelativeLayout 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"
tools:context=".MainActivity">
<TextView
android:id="@+id/editText0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号码"
android:textSize="20dp"
/>
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/editText0"
android:hint="号码"
android:textSize="25dp">
>
EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/editText1"
android:text="拨打"
android:textSize="25dp">
Button>
RelativeLayout>
主活动:
package com.example.phonecall;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText et_number=(EditText) findViewById(R.id.editText1);
Button bt=(Button) findViewById(R.id.button1);
// 权限获取
int REQUEST_EXTERNAL_STORAGE = 1;
String[] PERMISSIONS_STORAGE = {
Manifest.permission.CALL_PHONE
};
int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE);
if(permission!= PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
MainActivity.this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// System.out.println("我被点击啦");
String number =et_number.getText().toString().trim();
if (number.equals("")){
Toast.makeText(MainActivity.this,"号码不为空",Toast.LENGTH_SHORT).show();
}
else{
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);
}
}
});
}
}
清单文件:拨打电话的权限添加
<uses-permission
android:name="android.permission.CALL_PHONE"/>
官方文档指出android 6以后,即使在清单文件中列出,仍然要每次检查权限,
目前的解决办法,参考网上一位博主,创建活动时检查权限;
之后可能深入了解后,会有其他解决办法
// 权限获取
int REQUEST_EXTERNAL_STORAGE = 1;
String[] PERMISSIONS_STORAGE = {
Manifest.permission.CALL_PHONE
};
int permission = ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE);
if(permission!= PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
MainActivity.this,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
按键布局中加一个onclick属性,在Activity里面定义一个方法方法名和属性名系统
该方法原理比较复杂,涉及安卓源码,暂不详解
官方:类似于弹窗提示
A toast is a view containing a quick little message for the user. The toast class helps you create and show those.
使用Toast提示号码不为空
code
String number =et_number.getText().toString().trim();
if (number.equals("")){
Toast.makeText(MainActivity.this,"号码不为空",Toast.LENGTH_SHORT).show();
}
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
startActivity(intent);