ตัวอย่างนี้สาธิตวิธี ซ่อน (Invisible/Gone) หรือลบปุ่ม ออกจาก Layout แบบไดนามิกใน Android
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
Android Studio → New Project → Empty Activity
ขั้นตอนที่ 2: Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="Button Visibility Demo"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="24sp"
android:textStyle="bold" />
<Button
android:id="@+id/btnToggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@android:color/white"
android:padding="12dp"
android:text="Click to Hide Me"
android:textColor="@android:color/holo_red_dark"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
ขั้นตอนที่ 3: โค้ดหลัก (MainActivity.kt)
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "Button Visibility"
val btnToggle = findViewById
🔍 ความแตกต่าง: INVISIBLE vs GONE
| Property | View.VISIBLE | View.INVISIBLE | View.GONE |
|---|---|---|---|
| แสดงบนหน้าจอ | ✅ ใช่ | ❌ ไม่ | ❌ ไม่ |
| ครอบพื้นที่ Layout | ✅ ใช่ | ✅ ใช่ (ยังจองที่ไว้) | ❌ ไม่ (หายไปเลย) |
| รับ Event (Click, Focus) | ✅ ใช่ | ❌ ไม่ | ❌ ไม่ |
| ใช้เมื่อไหร่ | ปกติ | ซ่อนชั่วคราว ต้องการคง Layout | ลบออก/ซ่อนถาวร ปรับ Layout ใหม่ |
🗑️ วิธี "ลบ" View จริงๆ (Remove from Parent)
val parent = btnToggle.parent as? ViewGroup parent?.removeView(btnToggle) // ⚠️ View นี้จะไม่สามารถ addView กลับเข้าไปได้อีก (ถ้าไม่ new Instance)
🎭 Animation การซ่อน/แสดง (แนะนำ)
// Fade Out แล้ว GONE
btnToggle.animate()
.alpha(0f)
.setDuration(300)
.withEndAction { btnToggle.visibility = View.GONE }
.start()
// Fade In จาก GONE
btnToggle.visibility = View.VISIBLE
btnToggle.alpha = 0f
btnToggle.animate()
.alpha(1f)
.setDuration(300)
.start()
ขั้นตอนที่ 4: AndroidManifest.xml
Manifest มาตรฐาน
ทดสอบ
- รันแอป → ปุ่มแสดงอยู่กลางหน้าจอ
- กดครั้งที่ 1 → หาย (INVISIBLE) แต่พื้นที่ยังคงว่าง
- กดครั้งที่ 2 → หาย (GONE) พื้นที่หายไป Layout บีบอัด
- กดครั้งที่ 3 → กลับมาแสดงปกติ (VISIBLE)