Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีใช้ CheckedTextView ใน Android

CheckedTextView: TextView ที่มีสถานะ Checkable

CheckedTextView เป็นคลาสที่สืบทอดมาจาก TextView และ implements Checkable interface ใช้สำหรับรายการที่ต้องการให้ผู้ใช้เลือก/ยกเลิกเลือก (เช่น รายการใน ListView, การตั้งค่า, ฟอร์ม) สามารถแสดงเครื่องหมายถูก (check mark) ได้อัตโนมัติ

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project → Empty Activity

ขั้นตอนที่ 2: Layout - activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <CheckedTextView
        android:id="@+id/checkedTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckedTextView - กดเพื่อเลือก"
        android:textSize="22sp"
        android:padding="24dp"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:background="?android:attr/selectableItemBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

คุณสมบัติสำคัญ:

  • android:checkMark - ไอคอนเครื่องหมายถูก (ใช้ built-in หรือ drawable ของตัวเอง)
  • android:background - ให้ ripple effect เมื่อกด

ขั้นตอนที่ 3: MainActivity.java

package com.example.checkedtextviewdemo;

import android.os.Bundle;
import android.view.View;
import android.widget.CheckedTextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private CheckedTextView checkedTextView;

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

        checkedTextView = findViewById(R.id.checkedTextView);
        
        // ตั้งค่าเริ่มต้น
        checkedTextView.setChecked(false);
        
        checkedTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // สลับสถานะ checked
                checkedTextView.toggle();
                
                // หรือตั้งค่าโดยตรง
                // checkedTextView.setChecked(!checkedTextView.isChecked());
                
                String status = checkedTextView.isChecked() ? "✅ เลือกแล้ว" : "⬜ ยังไม่เลือก";
                Toast.makeText(MainActivity.this, status, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

การใช้งานใน ListView/RecyclerView (Pattern แบบคลาสสิก)

CheckedTextView มักใช้ร่วมกับ ListView ที่มี CHOICE_MODE_MULTIPLE หรือ CHOICE_MODE_SINGLE

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:choiceMode="multipleChoice" />
// ใน Adapter getView()
CheckedTextView checkedTextView = (CheckedTextView) convertView;
if (checkedTextView == null) {
    checkedTextView = new CheckedTextView(context);
    checkedTextView.setCheckMarkDrawable(android.R.drawable.checkbox_on_background);
}
checkedTextView.setText(items.get(position));
checkedTextView.setChecked(checkedItems.get(position));
return checkedTextView;

การปรับแต่ง Check Mark แบบกำหนดเอง

สร้าง res/drawable/custom_check_mark.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <vector xmlns:android="https://schemas.android.com/apk/res/android"
            android:width="24dp" android:height="24dp"
            android:viewportWidth="24" android:viewportHeight="24">
            <path android:fillColor="#4CAF50" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41-1.41L9,16.17z"/>
        </vector>
    </item>
    <item android:state_checked="false">
        <vector xmlns:android="https://schemas.android.com/apk/res/android"
            android:width="24dp" android:height="24dp"
            android:viewportWidth="24" android:viewportHeight="24">
            <path android:fillColor="#CCCCCC" android:pathData="M19,19H5V5H19V19ZM19,3H5C3.89,3 3,3.89 3,5V19C3,20.11 3.89,21 5,21H19C20.11,21 21,20.11 21,19V5C21,3.89 20.11,3 19,3Z"/>
        </vector>
    </item>
</selector>

ใช้ใน XML: android:checkMark="@drawable/custom_check_mark"

ความแตกต่าง CheckedTextView vs CheckBox

คุณสมบัติCheckedTextViewCheckBox
สืบทอดจากTextViewButton (CompoundButton)
รูปแบบข้อความพร้อม check markกล่อง checkbox แยกจากข้อความ
เหมาะสำหรับรายการใน List, เมนูตั้งค่าฟอร์ม, การตั้งค่า獨立
Click behaviortoggle() สลับสถานะtoggle() สลับสถานะ

สรุป

CheckedTextView เหมาะสำหรับ UI ที่ต้องการให้ข้อความตัวเองเป็นพื้นที่กดเลือก พร้อมแสดงสถานะด้วย check mark ใช้งานง่าย แค่เรียก toggle() หรือ setChecked() และตรวจสอบด้วย isChecked()