অ্যান্ড্রয়েডে TextView-এ টেক্সট জাস্টিফাই (Justify) করার পদ্ধতি
এই উদাহরণটি দেখায় কিভাবে RecyclerView এবং কাস্টম আইটেম লেআউট ব্যবহার করে টেক্সট জাস্টিফাই করার.member Milwaukee But actually the example uses RecyclerView with multiple TextViews. True justification in Android TextView requires API 26+ (android:justificationMode="inter_word") or custom layout. This example demonstrates a list with title, year, author.
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project এ যান এবং একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: মেইন লেআউট (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"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:scrollbars="none" />
</RelativeLayout>
ধাপ ৩: লিস্ট আইটেম লেআউট (list_item.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/song_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="New Text"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="@color/colorPrimaryDark" />
<TextView
android:id="@+id/song_year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/song_title"
android:layout_alignLeft="@+id/song_title"
android:layout_alignStart="@+id/song_title"
android:layout_marginTop="20dp"
android:text="New Text"
android:textColor="#000" />
<TextView
android:id="@+id/song_author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/song_year"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:text="New Text"
android:textColor="#000" />
</RelativeLayout>
ধাপ ৪: ItemObject.java (ডেটা মডেল)
package com.app.sample;
public class ItemObject {
private String songTitle;
private String songYear;
private String songAuthor;
public ItemObject(String songTitle, String songYear, String songAuthor) {
this.songTitle = songTitle;
this.songYear = songYear;
this.songAuthor = songAuthor;
}
public String getSongTitle() { return songTitle; }
public String getSongYear() { return songYear; }
public String getSongAuthor() { return songAuthor; }
}
ধাপ ৫: RecyclerViewAdapter.java
package com.app.sample;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<ItemObject> itemList;
private Context context;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
this.itemList = itemList;
this.context = context;
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
return new RecyclerViewHolders(layoutView);
}
@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
ItemObject item = itemList.get(position);
holder.songTitle.setText("Song Title: " + item.getSongTitle());
holder.songYear.setText("Song Year: " + item.getSongYear());
holder.songAuthor.setText("Song Author: " + item.getSongAuthor());
}
@Override
public int getItemCount() {
return itemList.size();
}
}
ধাপ ৬: RecyclerViewHolders.java
package com.app.sample;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView songTitle;
public TextView songYear;
public TextView songAuthor;
private SparseBooleanArray selectedItems = new SparseBooleanArray();
public RecyclerViewHolders(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
songTitle = itemView.findViewById(R.id.song_title);
songYear = itemView.findViewById(R.id.song_year);
songAuthor = itemView.findViewById(R.id.song_author);
}
@Override
public void onClick(View view) {
int pos = getAdapterPosition();
if (selectedItems.get(pos, false)) {
selectedItems.delete(pos);
view.setSelected(false);
} else {
selectedItems.put(pos, true);
view.setSelected(true);
}
}
}
ধাপ ৭: MainActivity.java
package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private RecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
// recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this)); // Optional
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
List<ItemObject> posts = returnListItems();
adapter = new RecyclerViewAdapter(this, posts);
recyclerView.setAdapter(adapter);
}
private List<ItemObject> returnListItems() {
List<ItemObject> items = new ArrayList<>();
items.add(new ItemObject("Blank Space", "Taylor Swift", "2016"));
items.add(new ItemObject("Uptown Funk", "Mark Ronson", "2016"));
items.add(new ItemObject("Can't Feel My Face", "The Weeknd", "2016"));
items.add(new ItemObject("Cheerleader", "OMI", "2016"));
items.add(new ItemObject("What Do You Mean?", "Justin Bieber", "2016"));
items.add(new ItemObject("Hello", "Adele", "2016"));
return items;
}
}
ধাপ ৮: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<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>
সত্যিকারের টেক্সট জাস্টিফিকেশন (API 26+)
যদি আপনি শুধু একটি TextView-এ জাস্টিফাইড টেক্সট চান, তবে API 26 (Android 8.0) বা তার উপরে নিচের অ্যাট্রিবিউট ব্যবহার করুন:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="আপনার বড় টেক্সট এখানে..."
android:justificationMode="inter_word" />
অ্যাপটি চালান
ডিভাইস সংযুক্ত করে Run ক্লিক করুন। RecyclerView-এ গানের তালিকা দেখাবে।
