[Android] FloatingActionButton:建置按鈕功能

官方的API文件: Add a Floating Action Button

官方的文件將建置FloatingActionButton功能的方法做了蠻清楚的描述

這邊對於相關的API和方法做更詳細地解釋和實作

 

對於FloatingActionButton的元件設定,

可以參考筆者這篇:[Android] FloatingActionButton:元件與Library設定

 

官方的範例:按下FloatingActionButton,下方跑出Toast元件的快顯訊息

筆者這邊使用按下FloatingActionButton後,跑出AlertDialog,像是下方的形式。

FloatingActionButton類別解析

FloatingActionButton有繼承View類別,所以可以使用setOnClickListener方法

setOnClickListener用來處理當View被click時,所引發的動作

AlertDialog.Builder類別使用建造者模式(Builder Pattern)將AlertDialog.Builder建造出來

Android大量使用建造者模式,會在之後的文章再討論這個部分。

AlertDialog.Builder的方法使用後大部分都會回傳AlertDialog.Builder型別的物件,所以在使用上各個方法的順序性並不影響AlertDialog.Builder的建置

記得最後要使用show方法,回傳AlertDialog物件,AlertDialog即可建置完成。

 

FloatingActionButton實作練習

分別使用Java & Kotlin實作

Java實作
import android.app.AlertDialog;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

public class MainActivity extends AppCompatActivity {

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

        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("Title")
                        .setMessage("Choose")
                        .setPositiveButton("OK", new DialogInterface.OnClickListener(){
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .show();
            }
        });

    }
}

 

可以使用Java 8的lambda語法讓程式碼更簡潔

fab.setOnClickListener(v ->
        new AlertDialog.Builder(this)
                .setTitle("Title")
                .setMessage("Choose")
                .setPositiveButton("OK", (dialog, which) -> {})
                .show());

 

Kotlin實作
import android.app.AlertDialog
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        fab.setOnClickListener {
            AlertDialog.Builder(this)
                .setTitle("Title")
                .setMessage("Choose")
                .setPositiveButton("OK") { dialog, which ->  }
                .show()
        }
    }
}

Kotlin在lambda語法的使用上,比Java更加簡潔

由於lamda語法的出現讓程式碼需要寫的行數更少更方便,但有時候久了會忘記他原本未使用lambda語法的面貌,時不時可以用最原本的方式撰寫恢復一下記憶