Android ListView के रंग और फॉन्ट कस्टमाइज़ करना
यह ट्यूटोरियल दिखाता है कि कैसे कस्टम एडाप्टर और लेआउट का उपयोग करके ListView आइटम्स के टेक्स्ट रंग, बैकग्राउंड रंग, और फॉन्ट स्टाइल बदले जाते हैं।
चरण 1: प्रोजेक्ट बनाएं
Android Studio में नया प्रोजेक्ट बनाएं।
चरण 2: मेन लेआउट
res/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"
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>
चरण 3: कस्टम रो लेआउट
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="horizontal"
android:padding="16dp"
android:background="@drawable/list_item_background">
<ImageView
android:id="@+id/itemIcon"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@android:drawable/ic_menu_info_details"
android:layout_marginEnd="16dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/itemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="आइटम शीर्षक"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#333333" />
<TextView
android:id="@+id/itemSubtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="आइटम उपशीर्षक"
android:textSize="14sp"
android:textColor="#666666" />
</LinearLayout>
</LinearLayout>
चरण 4: रो बैकग्राउंड ड्रॉएबल
res/drawable/list_item_background.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>
चरण 5: कस्टम एडाप्टर
src/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.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class CustomAdapter extends BaseAdapter {
private Context context;
private List<String> items;
private List<String> subtitles;
private Typeface customFont;
public CustomAdapter(Context context, List<String> items, List<String> subtitles) {
this.context = context;
this.items = items;
this.subtitles = subtitles;
// कस्टम फॉन्ट लोड करें (assets/fonts/ से)
try {
customFont = Typeface.createFromAsset(context.getAssets(), "fonts/custom_font.ttf");
} catch (Exception e) {
customFont = Typeface.DEFAULT;
}
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.itemIcon = convertView.findViewById(R.id.itemIcon);
holder.itemTitle = convertView.findViewById(R.id.itemTitle);
holder.itemSubtitle = convertView.findViewById(R.id.itemSubtitle);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.itemTitle.setText(items.get(position));
holder.itemSubtitle.setText(subtitles.get(position));
// कस्टम फॉन्ट लागू करें
holder.itemTitle.setTypeface(customFont, Typeface.BOLD);
holder.itemSubtitle.setTypeface(customFont, Typeface.NORMAL);
// वैकल्पिक: पोजीशन के आधार पर रंग बदलें
if (position % 2 == 0) {
holder.itemTitle.setTextColor(context.getColor(R.color.colorPrimary));
} else {
holder.itemTitle.setTextColor(context.getColor(android.R.color.black));
}
return convertView;
}
static class ViewHolder {
ImageView itemIcon;
TextView itemTitle, itemSubtitle;
}
}
चरण 6: MainActivity में उपयोग
src/MainActivity.java:
package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import java.util.Arrays;
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> titles = Arrays.asList(
"पहला आइटम", "दूसरा आइटम", "तीसरा आइटम",
"चौथा आइटम", "पांचवा आइटम", "छठा आइटम"
);
List<String> subtitles = Arrays.asList(
"उपशीर्षक 1", "उपशीर्षक 2", "उपशीर्षक 3",
"उपशीर्षक 4", "उपशीर्षक 5", "उपशीर्षक 6"
);
CustomAdapter adapter = new CustomAdapter(this, titles, subtitles);
listView.setAdapter(adapter);
// क्लिक लिस्टनर
listView.setOnItemClickListener((parent, view, position, id) -> {
// हैंडल क्लिक
});
}
}
सिंपल एडाप्टर के साथ क्विक कस्टमाइजेशन
अगर सिंपल ArrayAdapter उपयोग कर रहे हैं:
// सिंपल कस्टम लेआउट के साथ ArrayAdapter
ArrayAdapter<String> adapter = new ArrayAdapter<>(
this,
R.layout.simple_list_item, // कस्टम लेआउट जिसमें एक TextView हो
R.id.textView, // उस TextView की ID
items
) {
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView textView = view.findViewById(R.id.textView);
textView.setTextColor(Color.BLUE);
textView.setTypeface(Typeface.DEFAULT_BOLD);
return view;
}
};
चरण 7: मैनिफेस्ट
स्टैंडर्ड कॉन्फ़िगरेशन।
महत्वपूर्ण नोट: RecyclerView प्राथमिकता दें
ListView लीगेसी है। नए प्रोजेक्ट्स के लिए RecyclerView उपयोग करें:
- बेहतर परफॉरमेंस (ViewHolder पैटर्न अनिवार्य)
- लचीला लेआउट (Grid, Staggered, Horizontal)
- एनिमेशन सपोर्ट (DefaultItemAnimator)
- आसान डेकोरेशन (डिवाइडर, स्पेसिंग)
फॉन्ट्स के लिए बेस्ट प्रैक्टिस
- फॉन्ट फाइल्स को
res/font/में रखें (API 26+) याassets/fonts/ - XML में फॉन्ट फैमिली परिभाषित करें:
android:fontFamily="@font/custom_font" - डाउनलोडेबल फॉन्ट्स के लिए Google Fonts API उपयोग करें