Android新手入門1

Comet_sgf發表於2020-12-30


前言

本人從零開始學習安卓開發,在b站上看up主視訊,可搜尋“卓越工作室”,2020年安卓(Android)最新基礎知識詳解,一起學習!相關原始碼可見本人釋出的資源


開發文件

一、建立安卓專案

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

1.目錄結構

在這裡插入圖片描述
推薦使用Android APP 專案檢視
AndroidManifest.xml是專案全域性配置、註冊檔案
MainActivity是一個頁面,也是主頁面,並不是單一一個java檔案,而是由許多配置檔案組成的
activity_main.xml是MainActivity的佈局配置檔案,二者一一對應

二、Activity活動基本用法

1.建立活動

(有MainActivity可跳過此步,僅理解即可)在新建頁面activity時,使用模板建立,如下圖:

在這裡插入圖片描述
活動建立後,會在res->layout資料夾下生成佈局檔案,AndroidManifest.xml中也會生成對應配置語句

2.建立和載入佈局

在初始的新建專案中,有hello world的文字,可以作為參考。
activity_main.xml中新新增Button元件,程式碼如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">

    <Button
        android:id="@+id/button1"
        android:text="Button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

敲出Button時會有自動補全,完善layout佈局屬性,其他屬性自行新增,id要求以“@+id/”形式編寫,text內容自定義,tools:ignore是忽略其佈局限制的語句,可不新增。

3.在AndroidManifest.xml註冊

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidstudy.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

activity標籤為頁面註冊功能,intent-filter標籤內通常含有action和category標籤

  • action中name屬性只能有唯一的MAIN作為主入口,在其他activity中可自定義
  • category中name屬性為LAUNCHER,作為第一個開啟的頁面,其他頁面用DEFAULT
    (目前理解如上,如有錯誤,還請指出,謝謝)

4.在活動中使用Toast

第二步中已經新增了按鈕的配置檔案,現在在activity中進行初始化,並且新增點選監聽。

package com.androidstudy.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //定義頁面中按鈕
    private Button button1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    public void initView(){
        //通過R類id找到配置中的按鈕
        button1 = findViewById(R.id.button1);
        //設定點選監聽器,用匿名內部類直接重寫
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "SHOW ME", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

在這裡插入圖片描述
Toast類中,makeText函式可以顯示如上圖提示資訊,第二個引數為內容,第三個引數為資訊的顯示時間長度,可自行更改;
上午中Button按鈕的文字全是大寫,是由於頁面設定的問題。可通過如下方式解決:

  1. 開啟AndroidManifest.xml,按住ctrl,點選AppTheme,進入style.xml,進行設定。
    在這裡插入圖片描述
  2. 在檔案中新增style標籤下新增<item name="android:textAllCaps">false</item>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:textAllCaps">false</item>
    </style>

</resources>

重新執行即可。

5.在活動中使用Menu

這裡的Menu是指如下圖所示效果:
在這裡插入圖片描述

  1. 建立menu資料夾,且名字只能為menu
    在這裡插入圖片描述
  2. 右鍵點選資料夾,新建menu.xml配置檔案,命名為menu,點選OK即可
    在這裡插入圖片描述
    在這裡插入圖片描述
    3.新增item
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/add"
        android:title="Add" />
    <item
        android:id="@+id/remove"
        android:title="Remove" />
    
</menu>

4.在MainActivity中進行初始化,有專門的初始化onCreateOptionsMenu方法,以及點選時onOptionsItemSelected方法。
此處設定為點選時顯示Toast提示。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
       switch (item.getItemId()){
           case R.id.add:
               Toast.makeText(MainActivity.this, "Add",Toast.LENGTH_LONG).show();
               break;
           case R.id.remove:
               Toast.makeText(MainActivity.this, "Remove",Toast.LENGTH_SHORT).show();
               break;
       }
       return true;
    }

這樣便可以了。
在這裡插入圖片描述
在這裡插入圖片描述

6.使用intent

Intent類可以完成頁面跳轉以及資料傳遞等功能,下面一一舉例說明。

頁面建立

  1. 新建頁面SecondActivity,新增按鈕Button2,操作方式如第一步所述。
    在這裡插入圖片描述
    兩個都勾選,然後點選finish。
  2. 修改AndroidManifest.xml,更改SecondActivity的Action和Category如下,name可以自定義,但不可以重複
<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.androidstudy.myapplication.SEC_ACTION" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

頁面跳轉

  1. 顯式intent,在Button1的監聽器中新增Intent,完成兩個頁面的跳轉
public void initView(){
        //通過R類id找到配置中的按鈕
        button1 = findViewById(R.id.button1);
        //設定點選監聽器,用匿名內部類直接重寫
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "SHOW ME", Toast.LENGTH_SHORT).show();

                //顯式Intent
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }
  1. 隱式intent,不指明特定Class
//隱式Intent
Intent intent = new Intent("com.androidstudy.myapplication.SEC_ACTION");
startActivity(intent);

活動之間資料傳遞

1. Main-資訊傳遞->Second
點選Main中Button1,跳轉到Second併傳送訊息。

  • Main傳送方,在button按鈕的監聽器中
Intent intent = new Intent("com.androidstudy.myapplication.SEC_ACTION");
intent.putExtra("Data","Main to Second");
startActivity(intent);
  • Second接收方
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        initView();
        //接收Intent
        Intent intent = getIntent();
        String data = intent.getStringExtra("Data");
        //日誌輸出
        Log.d("Sec",data);
    }

2. Main-跳轉->Second-資訊傳遞->Main
點選Main中Button1,跳轉到Second,點選Second中Button2,傳送訊息,關閉Second,Main接收訊息。

  • Main接收方
public void initView(){
        //通過R類id找到配置中的按鈕
        button1 = findViewById(R.id.button1);
        //設定點選監聽器,用匿名內部類直接重寫
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "SHOW ME", Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(MainActivity.this, SecondActivity.class);

                //接收資訊 請求碼 識別請求和響應
                startActivityForResult(intent,1);
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode){
            case 1 :
                if(resultCode == RESULT_OK){
                    String dataResult = data.getStringExtra("data_return");
                    Log.d("MainActivity",dataResult);
                }
                break;
        }
    }
  • Second傳送方
public void initView(){
        button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return","Hello Main");
                setResult(RESULT_OK, intent);
                finish();//關閉視窗
            }
        });
    }

在這裡插入圖片描述

總結

簡單學習了Android,感覺不太陌生了。下次會有新的學習內容。如果以上有哪裡值得討論或者有問題,都可以留言。希望與大家共同進步!

相關文章