কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড ListView-এর রঙ এবং ফন্ট কীভাবে পরিবর্তন করবেন?

কাস্টম ArrayAdapter দিয়ে ListView স্টাইলিং

এই টিউটোরিয়ালটি দেখায় কীভাবে কাস্টম অ্যাডাপ্টার ব্যবহার করে ListView-এর প্রতিটি আইটেমের টেক্সট রঙ, ফন্ট, ব্যাকগ্রাউন্ড ইত্যাদি পরিবর্তন করা যায়।

ধাপ ১: প্রজেক্ট তৈরি করুন

Android Studio-তে নতুন প্রজেক্ট।

ধাপ ২: লেআউট (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    android:padding="10dp"
    android:background="#fbf9ea"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@android:color/transparent"
        android:dividerHeight="8dp" />
</RelativeLayout>

ধাপ ৩: কাস্টম আইটেম লেআউট (res/layout/list_item.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp"
    android:background="@drawable/list_item_bg">
    
    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"
        android:textColor="#212121" />
        
    <TextView
        android:id="@+id/tvSubtitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:textSize="14sp"
        android:textColor="#757575" />
        
</LinearLayout>

ধাপ ৪: ড্রয়েবল ব্যাকগ্রাউন্ড (res/drawable/list_item_bg.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape>
            <solid android:color="#E0E0E0" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item android:state_selected="true">
        <shape>
            <solid android:color="#BBDEFB" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item>
        <shape>
            <solid android:color="#FFFFFF" />
            <corners android:radius="8dp" />
            <stroke android:width="1dp" android:color="#E0E0E0" />
        </shape>
    </item>
</selector>

ধাপ ৫: কাস্টম অ্যাডাপ্টার (CustomAdapter.java)

package com.app.sample;

import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.util.List;

public class CustomAdapter extends ArrayAdapter<String> {
    private Context context;
    private List<String> items;
    private int layoutResourceId;

    public CustomAdapter(@NonNull Context context, int resource, @NonNull List<String> items) {
        super(context, resource, items);
        this.context = context;
        this.items = items;
        this.layoutResourceId = resource;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ViewHolder holder;
        
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(layoutResourceId, parent, false);
            
            holder = new ViewHolder();
            holder.tvTitle = convertView.findViewById(R.id.tvTitle);
            holder.tvSubtitle = convertView.findViewById(R.id.tvSubtitle);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        
        String item = items.get(position);
        holder.tvTitle.setText(item);
        holder.tvSubtitle.setText("আইটেম নম্বর: " + (position + 1));
        
        // কাস্টম ফন্ট প্রয়োগ (assets/fonts/ থেকে)
        // Typeface customFont = Typeface.createFromAsset(context.getAssets(), "fonts/custom_font.ttf");
        // holder.tvTitle.setTypeface(customFont);
        // holder.tvSubtitle.setTypeface(customFont);
        
        // পজিশন অনুযায়ী রঙ পরিবর্তন
        if (position % 2 == 0) {
            holder.tvTitle.setTextColor(Color.parseColor("#1565C0")); // নীল
        } else {
            holder.tvTitle.setTextColor(Color.parseColor("#C62828")); // লাল
        }
        
        return convertView;
    }

    static class ViewHolder {
        TextView tvTitle;
        TextView tvSubtitle;
    }
}

ধাপ ৬: MainActivity.java

package com.app.sample;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ListView listView = findViewById(R.id.lv);
        
        List<String> data = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            data.add("আইটেম " + i);
        }
        
        CustomAdapter adapter = new CustomAdapter(this, R.layout.list_item, data);
        listView.setAdapter(adapter);
        
        // ক্লিক লিসনার
        listView.setOnItemClickListener((parent, view, position, id) -> {
            String selected = data.get(position);
            Toast.makeText(this, "সিলেক্টেড: " + selected, Toast.LENGTH_SHORT).show();
        });
    }
}

ধাপ ৭: ম্যানিফেস্ট

সাধারণ কনফিগারেশন।

RecyclerView-এ মাইগ্রেশন (সুপারিশড)

ListView ডিপ্রিকেটেড নয় কিন্তু RecyclerView বেশি linh hoạt এবং পারফরম্যান্স ভালো:

// build.gradle
implementation "androidx.recyclerview:recyclerview:1.3.2"

// Adapter প্যাটার্ন একই (ViewHolder, onBindViewHolder)
// LayoutManager: LinearLayoutManager, GridLayoutManager, StaggeredGridLayoutManager
// ItemAnimator, ItemDecoration বিল্ট-ইন সাপোর্ট

ফন্ট রিসোর্স যোগ করা (API 26+)

<!-- res/font/my_font.xml -->
<font-family xmlns:android="https://schemas.android.com/apk/res/android">
    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/my_font_regular" />
    <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/my_font_italic" />
</font-family>

// XML-এ ব্যবহার
<TextView
    android:fontFamily="@font/my_font"
    android:textStyle="bold|italic" />

// কোডে
Typeface typeface = ResourcesCompat.getFont(context, R.font.my_font);
textView.setTypeface(typeface);
  1. এন্ড্রয়েডে DatePicker ডায়ালগের রঙ পরিবর্তন করার পদ্ধতি

  2. Android WebView-এ ফন্ট ফেস (Font Face) পরিবর্তন করার পদ্ধতি

  3. অ্যান্ড্রয়েড ListView-এর রঙ এবং ফন্ট কীভাবে পরিবর্তন করবেন?

  4. এক্সেসে ফন্ট ফেস, আকার এবং রং পরিবর্তন করার পদ্ধতি