ภาพรวม
ตัวอย่างนี้แสดงวิธีใช้ AppBarLayout ร่วมกับ CoordinatorLayout และ Toolbar เพื่อสร้าง App Bar ที่มีพฤติกรรม Scrolling ตาม Material Design Guidelines
ขั้นตอนการสร้าง
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
เปิด Android Studio ไปที่ File → New Project เลือก Template ที่มี Material Components หรือเพิ่ม Dependency:
implementation 'com.google.android.material:material:1.9.0'
ขั้นตอนที่ 2: ออกแบบ Layout (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ขั้นตอนที่ 3: เขียนโค้ดหลัก (src/MainActivity.java)
package com.example.myapplication;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CustomAdapter adapter;
private ArrayList<String> dataList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setup Toolbar
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle("AppBarLayout Demo");
setSupportActionBar(toolbar);
// Setup RecyclerView
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new CustomAdapter(this, dataList);
recyclerView.setAdapter(adapter);
// Add sample data
for (int i = 0; i < 30; i++) {
dataList.add("Item " + (i + 1));
}
adapter.notifyDataSetChanged();
}
}
ขั้นตอนที่ 4: สร้าง Adapter (src/CustomAdapter.java)
package com.example.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private Context context;
private ArrayList<String> dataList;
public CustomAdapter(Context context, ArrayList<String> dataList) {
this.context = context;
this.dataList = dataList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.textView.setText(dataList.get(position));
}
@Override
public int getItemCount() {
return dataList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(android.R.id.text1);
}
}
}
พฤติกรรม Scroll Flags
| Flag | คำอธิบาย |
|---|---|
| scroll | App Bar จะเลื่อนหายเมื่อ Scroll ลง |
| enterAlways | App Bar จะแสดงทันทีเมื่อ Scroll ขึ้น |
| enterAlwaysCollapsed | แสดงแบบยุบตัวเมื่อ Scroll ขึ้น (ต้องใช้กับ minHeight) |
| exitUntilCollapsed | เลื่อนหายจนเหลือ minHeight |
| snap | App Bar จะ Snap ไปที่ตำแหน่งเต็มหรือหายไปโดยอัตโนมัติ |