Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Thay đổi màu nền ListView item khi click Android Kotlin

Hướng dẫn này minh họa cách thay đổi màu nền của ListView item khi được click trên Android sử dụng Kotlin.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (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"
    android:padding="8dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

Bước 3: Thêm màu vào res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorAccent">#FF4081</color>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
</resources>

Bước 4: Viết code MainActivity.kt

import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView

class MainActivity : AppCompatActivity() {
    private val operatingSystem = arrayOf(
        "Android", "iPhone", "Windows Mobile",
        "Blackberry", "WebOS", "Ubuntu", "Windows 7", "Mac OS X"
    )

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

        val listView: ListView = findViewById(R.id.listView)
        val adapter = ArrayAdapter<String>(
            this,
            android.R.layout.simple_list_item_1,
            operatingSystem
        )
        listView.adapter = adapter

        listView.setOnItemClickListener { _, view, _, _ ->
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                view.setBackgroundColor(getColor(R.color.colorAccent))
            }
        }
    }
}

Bước 5: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.q11">

    <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>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Click vào bất kỳ item nào trong ListView, item đó sẽ đổi màu nền thành colorAccent (hồng).

Cải tiến: Giữ trạng thái chọn (Selector)

Tạo res/drawable/list_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/colorAccent" />
    <item android:state_selected="true" android:drawable="@color/colorPrimary" />
    <item android:drawable="@android:color/transparent" />
</selector>

Áp dụng cho ListView:

listView.setSelector(R.drawable.list_selector)
listView.choiceMode = ListView.CHOICE_MODE_SINGLE

Trong adapter, set view.isSelected = (position == selectedPosition).