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

Android-এ স্ট্রিং-এ Subscript ও Superscript ব্যবহার

SpannableStringBuilder দিয়ে Subscript/Superscript

Android-এ টেক্সটের নির্দিষ্ট ক্যারেক্টারকে সাবস্ক্রিপ্ট (নিচে) বা সুপারস্ক্রিপ্ট (উপরে) করার জন্য SpannableStringBuilder ও Spannable ব্যবহার করা হয়।

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

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

ধাপ ২: লেআউট (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">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="36sp"
        android:textStyle="bold"
        android:fontFamily="sans-serif-condensed" />
</RelativeLayout>

ধাপ ৩: MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.RelativeSizeSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    String strText;
    SpannableStringBuilder spannableStringBuilder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        textView = findViewById(R.id.textView);
        strText = "Test text to show SubscriptSpan X2 and SuperscriptSpan Y5 example.";
        spannableStringBuilder = new SpannableStringBuilder(strText);
        
        // SubscriptSpan: ক্যারেক্টার নিচে নামানো
        SubscriptSpan subscriptSpan = new SubscriptSpan();
        int index2 = strText.indexOf("2");
        spannableStringBuilder.setSpan(subscriptSpan, index2, index2 + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        // SuperscriptSpan: ক্যারেক্টার উপরে তোলা
        SuperscriptSpan superscriptSpan = new SuperscriptSpan();
        int index5 = strText.indexOf("5");
        spannableStringBuilder.setSpan(superscriptSpan, index5, index5 + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        // ছোট আকারে করা (সাব/সুপারস্ক্রিপ্টের জন্য সাধারণ)
        showSmallSizeText("2");
        showSmallSizeText("5");
        
        textView.setText(spannableStringBuilder);
    }

    private void showSmallSizeText(String s) {
        RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(0.5f); // 50% আকার
        int index = strText.indexOf(s);
        spannableStringBuilder.setSpan(relativeSizeSpan, index, index + s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
}

ধাপ ৪: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.subsuperscript">
    <application ...>
        <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>

Spannable Flags ব্যাখ্যা

Flagব্যাখ্যা
SPAN_EXCLUSIVE_EXCLUSIVEস্প্যানের বাইরে টেক্সট যোগ হলে স্প্যান প্রসারিত হয় না (ডিফল্ট)
SPAN_INCLUSIVE_INCLUSIVEস্প্যানের বাইরে টেক্সট যোগ হলে স্প্যান প্রসারিত হয়
SPAN_EXCLUSIVE_INCLUSIVEশুধু শেষে যোগ হলে প্রসারিত হয়
SPAN_INCLUSIVE_EXCLUSIVEশুধু শুরুতে যোগ হলে প্রসারিত হয়

অন্যান্য مفید Spannable ক্লাস

  • StyleSpan - Bold, Italic, Bold-Italic
  • ForegroundColorSpan - টেক্সট রঙ
  • BackgroundColorSpan - হাইলাইট রঙ
  • UnderlineSpan - আন্ডারলাইন
  • StrikethroughSpan - স্ট্রাইকথ্রু
  • ClickableSpan - ক্লিকযোগ্য টেক্সট
  • URLSpan - লিংক
  • ImageSpan - ইমেজ ইনলাইন

হেল্পার মেথড (পুনরাবৃত্তি করা সহজ)

private void applySubscript(SpannableStringBuilder ssb, String text, String target) {
    int start = text.indexOf(target);
    if (start >= 0) {
        ssb.setSpan(new SubscriptSpan(), start, start + target.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        ssb.setSpan(new RelativeSizeSpan(0.6f), start, start + target.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
}
  1. Android ImageView-এ Zoom In/Out ইমপ্লিমেন্টেশন

  2. পাওয়ারপয়েন্টে সুপারস্ক্রিপ্ট ও সাবস্ক্রিপ্ট বন্ধ করার উপায়

  3. ওয়ার্ড, এক্সেল, পাওয়ারপয়েন্টে টেক্সট সুপারস্ক্রিপ্ট বা সাবস্ক্রিপ্ট ফরম্যাট করুন

  4. গুগল ডক্সে সাবস্ক্রিপ্ট এবং সুপারস্ক্রিপ্ট ব্যবহার করার পদ্ধতি