setCompoundDrawablesWithIntrinsicBounds() ব্যবহার করে বাটনে আইকন যোগ করা
অ্যান্ড্রয়েড বাটনে টেক্সটের পাশে আইকন (drawableLeft/Start) যোগ করার জন্য `setCompoundDrawablesWithIntrinsicBounds()` মেথড ব্যবহার করা হয়। এটি XML-এ `android:drawableStart`/`drawableLeft` এর সমতুল্য প্রোগ্রাম্যাটিক্যালি করে।
ধাপ ১: প্রজেক্ট তৈরি করুন
স্ট্যান্ডার্ড অ্যান্ড্রয়েড প্রজেক্ট।
ধাপ ২: লেআউট (XML-এ ইতিমধ্যে ড্রয়েবল থাকতে পারে)
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"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button/DrawableLeft"
android:textSize="24sp"
android:textStyle="bold"
android:drawableStart="@drawable/ic_brush" />
</RelativeLayout>
ধাপ ৩: প্রোগ্রাম্যাটিক্যালি ড্রয়েবল সেট করুন
src/MainActivity.java:
import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
// ড্রয়েবল রিসোর্স পাওয়া
Drawable img = getResources().getDrawable(R.drawable.ic_brush);
// Intrinsic bounds সেট করে বামে রাখা
// প্যারামিটার: left, top, right, bottom
button.setCompoundDrawablesWithIntrinsicBounds(img, null, null, null);
// অথবা স্পষ্টভাবে বাউন্ডস সেট করে:
// img.setBounds(0, 0, img.getIntrinsicWidth(), img.getIntrinsicHeight());
// button.setCompoundDrawables(img, null, null, null);
}
}
মেথড সিগনেচার ব্যাখ্যা
setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)
- left: টেক্সটের বামে (LTR-এ) / ডানে (RTL-এ)
- top: টেক্সটের উপরে
- right: টেক্সটের ডানে (LTR-এ) / বামে (RTL-এ)
- bottom: টেক্সটের নিচে
- `null` দিলে সেট পজিশনে কোনো ড্রয়েবল থাকে না
আরও উদাহরণ
// শুধু ডানদিকে আইকন button.setCompoundDrawablesWithIntrinsicBounds(null, null, rightDrawable, null); // উপরে এবং নিচে আইকন button.setCompoundDrawablesWithIntrinsicBounds(null, topDrawable, null, bottomDrawable); // সব দিকেই button.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); // ড্রয়েবল ক্লিয়ার করা button.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
DrawableCompat ব্যবহার (ভেক্টর ড্রয়েবলের জন্য)
API 23-এর নিচে ভেক্টর ড্রয়েবল সাপোর্টের জন্য:
import android.support.v4.graphics.drawable.DrawableCompat; Drawable drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.ic_vector)); DrawableCompat.setTint(drawable, Color.WHITE); // রঙ পরিবর্তন button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
XML vs প্রোগ্রাম্যাটিক
| পদ্ধতি | ব্যবহার ক্ষেত্র |
|---|---|
| XML (android:drawableStart) | স্ট্যাটিক আইকন, সহজ রক্ষণাবেক্ষণ |
| প্রোগ্রাম্যাটিক (setCompoundDrawables) | ডাইনামিক আইকন, রানটাইমে পরিবর্তন, শর্তসাপেক্ষ |