1. 程式人生 > >Android studio程式碼實現打電話+點選事件四種方式

Android studio程式碼實現打電話+點選事件四種方式

?Android系統架構(重點)

第一層:應用層Application
第二層:應用框架層Application Framework
第三層:Android底層類庫層 Libraries、Dalvik虛擬機器
第四層:linux核心層 linux kernel

Android是執行在Linux核心基礎之上的。Google官方上提供了一張Android系統架構圖(四層)。

?兩種虛擬機器的不同 (重點)

1、架構不同:JVM使用棧架構;Dalvik使用的是暫存器,資料是載入到CUP的暫存器上的。
2、JVM載入的.class檔案,Dalvik載入的是.dex檔案,對記憶體的分配情況做了優化。
3、jvm: sun oracle dvm: Google

?Android工程的目錄結構(這些目錄結構是eclipse下的目錄結構,Android studio中的目錄結構不一樣)

src/ java原始碼存放目錄

gen/ 自動生成目錄
gen 目錄中存放所有由Android開發工具自動生成的檔案。目錄中最重要的就是R.java檔案。 這個檔案由Android開發工具自動產生的。Android開發工具會自動根據你放入res目錄的資源,同步更新修改R.java檔案。正因為R.java檔案是由開發工具自動生成的,所以我們應避免手工修改R.java。R.java在應用中起到了字典的作用,它包含了各種資源的id,通過R.java,應用可以很方便地找到對應資源。另外編繹器也會檢查R.java列表中的資源是否被使用到,沒有被使用到的資源不會編繹進軟體中,這樣可以減少應用在手機佔用的空間。

res/ 資源(Resource)目錄
在這個目錄中我們可以存放應用使用到的各種資源,如xml介面檔案,圖片或資料。

libs/ 支援庫目錄
程式開發時需要的一些三方的jar包可以放在這個目錄,系統會自動把裡面的jar包,新增到環境變數。

assets資源目錄
Android除了提供/res目錄存放資原始檔外,在/assets目錄也可以存放資原始檔,而且/assets目錄下的資原始檔不會在R.java自動生成ID,所以讀取/assets目錄下的檔案必須指定檔案的路徑,如:file://android_asset/xxx.3gp

AndroidManifest.xml 專案清單檔案(Android studio中的四大元件不用手動配置,會自動生成)
這個檔案列出了應用程式所提供的功能,以後你開發好的各種元件需要在該檔案中進行配置,如果應用使用到了系統內建的應用(如電話服務、網際網路服務、簡訊服務、GPS服務等等),你還需在該檔案中宣告使用許可權。

project.properties 專案環境資訊,一般是不需要修改此檔案

?ADB命令

— 常見命令:

adb devices 列出所有的裝置
adb shell 掛載到linux的空間 可以執行linux指令
adb install xxx.apk 如果有多個裝置,我們可以指定裝置 adb install –s emulator-5554 D:/xxx.apk
adb push 把檔案推到手機裡
adb pull 把檔案從手機里拉出來
ctrl + F11 橫豎屏的切換
?電話撥號器(重點)

開發專案的步驟:

1、理解需求,弄明白需求後在寫程式碼;
2、在Android工程中設計UI介面;
3、程式碼實現業務邏輯;

複製程式碼
1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android
3 xmlns:tools=“http://schemas.android.com/tools
4 android:id="@+id/activity_main"
5 android:layout_width=“match_parent”
6 android:layout_height=“match_parent”
7 >
8
9 <Button
10 android:text=“撥打電話”
11 android:layout_width=“wrap_content”
12 android:layout_height=“wrap_content”
13 android:layout_alignParentBottom=“true”
14 android:layout_centerHorizontal=“true”
15 android:layout_marginBottom=“179dp”
16 android:id="@+id/bt_call" />
17
18 <EditText
19 android:hint=“請輸入電話號碼”
20 android:layout_width=“wrap_content”
21 android:layout_height=“wrap_content”
22 android:layout_marginBottom=“53dp”
23 android:id="@+id/et_phone"
24 android:layout_above="@+id/bt_call"
25 android:layout_centerHorizontal=“true” />
26

複製程式碼

複製程式碼
1 package com.example.ahu_lichang.myapplication;
2
3 import android.content.Intent;
4 import android.net.Uri;
5 import android.os.Bundle;
6 import android.support.v7.app.AppCompatActivity;
7 import android.view.View;
8 import android.widget.Button;
9 import android.widget.EditText;
10
11 public class MainActivity extends AppCompatActivity {
12 private EditText et_phone;
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17
18 et_phone = (EditText) findViewById(R.id.et_phone);
19 Button bt_call = (Button) findViewById(R.id.bt_call);
20
21 bt_call.setOnClickListener(new View.OnClickListener() {
22 @Override
23 public void onClick(View v) {
24 //獲取輸入的電話號碼
25 String phone = et_phone.getText().toString().trim();
26 //建立打電話的意圖
27 Intent intent = new Intent();
28 //設定撥打電話的動作
29 intent.setAction(Intent.ACTION_CALL);
30 //設定撥打電話的號碼
31 intent.setData(Uri.parse(“tel:” + phone));
32 //開啟打電話的意圖
33 startActivity(intent);
34 }
35 });
36 }
37 }

複製程式碼

1

在這裡插入圖片描述在這裡插入圖片描述

注:這裡撥打電話ACTION_CALL,在API22(Android5.1)上能正常執行。但是在高版本的API,例如API25(Android7.0)中,已經新增許可權了,但是還是會報許可權的錯誤!
?點選事件的四種建立方式

(1)採用內部類MyOnClickListener的方式去實現OnClickListener介面

複製程式碼
1 package com.example.ahu_lichang.myapplication;
2
3 import android.content.Intent;
4 import android.net.Uri;
5 import android.os.Bundle;
6 import android.support.v7.app.AppCompatActivity;
7 import android.view.View;
8 import android.widget.Button;
9 import android.widget.EditText;
10
11 public class MainActivity extends AppCompatActivity {
12 private EditText et_phone;
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17
18 et_phone = (EditText) findViewById(R.id.et_phone);
19 Button bt_call = (Button) findViewById(R.id.bt_call);
20
21 /* bt_call.setOnClickListener(new View.OnClickListener() {
22 @Override
23 public void onClick(View v) {
24 //獲取輸入的電話號碼
25 String phone = et_phone.getText().toString().trim();
26 //建立打電話的意圖
27 Intent intent = new Intent();
28 //設定撥打電話的動作
29 intent.setAction(Intent.ACTION_CALL);
30 //設定撥打電話的號碼
31 intent.setData(Uri.parse(“tel:” + phone));
32 //開啟打電話的意圖
33 startActivity(intent);
34 }
35 });*/
36 class MyOnClickListener implements View.OnClickListener{
37
38 @Override
39 public void onClick(View v) {
40 //獲取輸入的電話號碼
41 String phone = et_phone.getText().toString().trim();
42 //建立打電話的意圖
43 Intent intent = new Intent();
44 //設定撥打電話的動作
45 intent.setAction(Intent.ACTION_CALL);
46 //設定撥打電話的號碼
47 intent.setData(Uri.parse(“tel:” + phone));
48 //開啟打電話的意圖
49 startActivity(intent);
50 }
51 }
52 bt_call.setOnClickListener(new MyOnClickListener());
53 }
54 }

複製程式碼

(2)匿名內部類

複製程式碼
1 package com.example.ahu_lichang.myapplication;
2
3 import android.content.Intent;
4 import android.net.Uri;
5 import android.os.Bundle;
6 import android.support.v7.app.AppCompatActivity;
7 import android.view.View;
8 import android.widget.Button;
9 import android.widget.EditText;
10
11 public class MainActivity extends AppCompatActivity {
12 private EditText et_phone;
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17
18 et_phone = (EditText) findViewById(R.id.et_phone);
19 Button bt_call = (Button) findViewById(R.id.bt_call);
20
21 bt_call.setOnClickListener(new View.OnClickListener() {
22 @Override
23 public void onClick(View v) {
24 //獲取輸入的電話號碼
25 String phone = et_phone.getText().toString().trim();
26 //建立打電話的意圖
27 Intent intent = new Intent();
28 //設定撥打電話的動作
29 intent.setAction(Intent.ACTION_CALL);
30 //設定撥打電話的號碼
31 intent.setData(Uri.parse(“tel:” + phone));
32 //開啟打電話的意圖
33 startActivity(intent);
34 }
35 });
36 }
37 }

複製程式碼

(3)當前類imp OnClickListener介面

複製程式碼
1 package com.example.ahu_lichang.myapplication;
2
3 import android.content.Intent;
4 import android.net.Uri;
5 import android.os.Bundle;
6 import android.support.v7.app.AppCompatActivity;
7 import android.view.View;
8 import android.widget.Button;
9 import android.widget.EditText;
10
11 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
12 private EditText et_phone;
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17
18 et_phone = (EditText) findViewById(R.id.et_phone);
19 Button bt_call = (Button) findViewById(R.id.bt_call);
20
21 bt_call.setOnClickListener(this);
22
23 /* bt_call.setOnClickListener(new View.OnClickListener() {
24 @Override
25 public void onClick(View v) {
26 //獲取輸入的電話號碼
27 String phone = et_phone.getText().toString().trim();
28 //建立打電話的意圖
29 Intent intent = new Intent();
30 //設定撥打電話的動作
31 intent.setAction(Intent.ACTION_CALL);
32 //設定撥打電話的號碼
33 intent.setData(Uri.parse(“tel:” + phone));
34 //開啟打電話的意圖
35 startActivity(intent);
36 }
37 });/
38 /
class MyOnClickListener implements View.OnClickListener{
39
40 @Override
41 public void onClick(View v) {
42 //獲取輸入的電話號碼
43 String phone = et_phone.getText().toString().trim();
44 //建立打電話的意圖
45 Intent intent = new Intent();
46 //設定撥打電話的動作
47 intent.setAction(Intent.ACTION_CALL);
48 //設定撥打電話的號碼
49 intent.setData(Uri.parse(“tel:” + phone));
50 //開啟打電話的意圖
51 startActivity(intent);
52 }
53 }
54 bt_call.setOnClickListener(new MyOnClickListener());*/
55 }
56 @Override
57 public void onClick(View v) {
58 //獲取輸入的電話號碼
59 String phone = et_phone.getText().toString().trim();
60 //建立打電話的意圖
61 Intent intent = new Intent();
62 //設定撥打電話的動作
63 intent.setAction(Intent.ACTION_CALL);
64 //設定撥打電話的號碼
65 intent.setData(Uri.parse(“tel:” + phone));
66 //開啟打電話的意圖
67 startActivity(intent);
68 }
69
70 }

複製程式碼

(4)onclick

複製程式碼
1 <Button
2 android:text=“撥打電話”
3 android:onClick=“onclick”
4 android:layout_width=“wrap_content”
5 android:layout_height=“wrap_content”
6 android:layout_alignParentBottom=“true”
7 android:layout_centerHorizontal=“true”
8 android:layout_marginBottom=“179dp”
9 android:id="@+id/bt_call" />

複製程式碼

複製程式碼
1 package com.example.ahu_lichang.myapplication;
2
3 import android.content.Intent;
4 import android.net.Uri;
5 import android.os.Bundle;
6 import android.support.v7.app.AppCompatActivity;
7 import android.view.View;
8 import android.widget.Button;
9 import android.widget.EditText;
10
11 public class MainActivity extends AppCompatActivity {
12 private EditText et_phone;
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17 et_phone = (EditText) findViewById(R.id.et_phone);
18 }
19 public void onclick(View v) {
20 //獲取輸入的電話號碼
21 String phone = et_phone.getText().toString().trim();
22 //建立打電話的意圖
23 Intent intent = new Intent();
24 //設定撥打電話的動作
25 intent.setAction(Intent.ACTION_CALL);
26 //設定撥打電話的號碼
27 intent.setData(Uri.parse(“tel:” + phone));
28 //開啟打電話的意圖
29 startActivity(intent);
30 }
31 }

複製程式碼

?五種佈局

  1. 線性佈局LinearLayout(重點) 分水平和垂直2種
  2. 相對佈局RelativeLayout:各個元件都是按照相對位置來擺放。
  3. 幀佈局FrameLayout: 一層一層繪製
  4. 表格佈局TableLayout
  5. 絕對佈局AbsoluteLayout 已經被谷歌廢棄

在實際的開發工作中線性佈局和相對佈局用的比較多,大多數的專案中都是各種不同佈局的相互巢狀使用。