কীভাবে প্রোগ্রামে অ্যান্ড্রয়েড বোতামে অঙ্কনযোগ্য লেফট সেট করবেন?


442

আমি গতিশীলভাবে বোতাম তৈরি করছি। আমি প্রথমে তাদের এক্সএমএল ব্যবহার করে স্টাইল করেছি এবং আমি নীচের এক্সএমএলটি নিয়ে এটিকে প্রগ্রেমেটিক করার চেষ্টা করছি।

<Button
    android:id="@+id/buttonIdDoesntMatter"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:text="buttonName"
    android:drawableLeft="@drawable/imageWillChange"
    android:onClick="listener"
    android:layout_width="fill_parent">
</Button>

আমার এখন পর্যন্ত যা আছে তাই এটি। আমি ড্রয়িং ছাড়া সব করতে পারি।

linear = (LinearLayout) findViewById(R.id.LinearView);
Button button = new Button(this);
button.setText("Button");
button.setOnClickListener(listener);
button.setLayoutParams(
    new LayoutParams(
        android.view.ViewGroup.LayoutParams.FILL_PARENT,         
        android.view.ViewGroup.LayoutParams.WRAP_CONTENT
    )
);      

linear.addView(button);

উত্তর:


1054

এটি setCompoundDrawablesকরার জন্য আপনি পদ্ধতিটি ব্যবহার করতে পারেন । উদাহরণ এখানে দেখুন । আমি এটি ব্যবহার না করেই এটি ব্যবহার করেছি setBoundsএবং এটি কাজ করে। আপনি যে কোনও উপায়ে চেষ্টা করতে পারেন।

আপডেট : লিঙ্কটি নিচে নেমে গেলে কোডটি এখানে অনুলিপি করা হচ্ছে

Drawable img = getContext().getResources().getDrawable(R.drawable.smiley);
img.setBounds(0, 0, 60, 60);
txtVw.setCompoundDrawables(img, null, null, null);

অথবা

Drawable img = getContext().getResources().getDrawable(R.drawable.smiley);
txtVw.setCompoundDrawablesWithIntrinsicBounds(img, null, null, null);

অথবা

txtVw.setCompoundDrawablesWithIntrinsicBounds(R.drawable.smiley, 0, 0, 0);

@ ভারুন, @ টিগার: আমার এটির সাথে একটি সমস্যা আছে: আমার ফাইল ম্যানেজারটি পাঠ্যদর্শনগুলির সাথে তালিকার ভিউ এবং ফোল্ডার আইকন হিসাবে একটি ফোল্ডার দেখায় drawableLeft। আপনি যখন পড়ার অনুমতি ছাড়াই কোনও ফোল্ডারে ক্লিক করেন তখন এটি নিষিদ্ধ আইকন সেট করার জন্য আমি আপনার পরামর্শগুলি চেষ্টা করেছি এবং এটি কার্যকর হয় it যাইহোক, আপনি যখন ফোল্ডারগুলি পরিবর্তন করেন এবং অ্যাডাপ্টারটি পুনরায় লোড করা হয়, নিষিদ্ধ আইকনটি স্থির থাকে (এটি পুনরায় চিত্রিত drawableLeftহয় না)। তুমি কি জানো আবেদন করতে কিভাবে notifyDataSetChangedজন্যও drawableLeftএকটি লুপ না করে? ধন্যবাদ!
লুইস এ। ফ্লোরিট

@ লুইসএ.ফ্লোরিট মনে হচ্ছে Listviewডাটা পরিবর্তন হওয়ার সাথে সাথে আপনার কোনও আইটেমের পুনর্নির্মাণের সাথে সম্পর্কিত কোনও প্রশ্ন রয়েছে - যা সত্যই এই প্রশ্ন বা উত্তরের সাথে সম্পর্কিত নয়। আমি আপনাকে মন্তব্যের পরিবর্তে একটি প্রশ্ন পোস্ট করার পরামর্শ দিচ্ছি।
টাইগার

@ টিগার: ঠিক আছে, আমি আপনার ট্রিকটি ব্যবহার করে আইকনটিও ফিরিয়ে দিয়েছি এবং নিষিদ্ধ ডায়ারের উপরে একটি লুপ করেছি। সমস্ত তালিকাভুক্ত আইটেমগুলি আবার আঁকার চেয়ে এটি আরও ভাল ... যাইহোক ধন্যবাদ!
লুইস এ ফ্লোরিট

3
আমি আমার অ্যাপে অদ্ভুত কিছু দেখছি। setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.money, 0 )না কাজ, আমি যদি layout.xml মধ্যে drawableRight সংজ্ঞায়িত করে। যদি আমি মূল আইকনটি ভিতরে রাখি onCreate(), তবে পরিবর্তনটি কাজ করে। এটি এপিআই 19 এর সাথে সম্পর্কিত হতে পারে?
ইনজেকশনার

উদাহরণ লিঙ্কটি খোলার নয়। কোন বিকল্প লিঙ্ক আছে?
যোগেশ উমেশ ভ্যাটি

100

কেবল আপনি এটি চেষ্টা করতে পারেন

txtVw.setCompoundDrawablesWithIntrinsicBounds(R.drawable.smiley, 0, 0, 0);

4
আরড্রোয়েবল.স্মিলিটি প্রথম 0 (প্রথম প্যারামিটার) জায়গায় থাকা উচিত শেষ না কারণ এই পদ্ধতির সংজ্ঞাটি হ'ল: {পাবলিক শূন্য সেটকম্পাউন্ডড্রাব্যাবলস উইথ ইন্ট্রিন্সিকবাউন্ডস (ইন্ট বাম, ইনট শীর্ষ, অভ্যন্তরে নীচে)
ar

আমিও এর চারপাশে প্যাডিং যুক্ত করতে পারি? এইভাবে অঙ্কনযোগ্য এবং পাঠ্যের মধ্যে খুব বেশি প্যাডিং নেই।
অ্যাডামএমসি 331

16

Kotlin Version

বোতামে অঙ্কনযোগ্য বাম যোগ করতে নীচে স্নিপেট ব্যবহার করুন:

val drawable = ContextCompat.getDrawable(context, R.drawable.ic_favorite_white_16dp)
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)

Important Point in Using Android Vector Drawable

আপনি যখন অ্যান্ড্রয়েড ভেক্টর আঁকতে সক্ষম ব্যবহার করছেন এবং 21 এর নীচে এপিআইয়ের জন্য পশ্চাদপটে সামঞ্জস্য পেতে চান , নিম্নলিখিত কোডগুলিতে এতে যুক্ত করুন:

অ্যাপ্লিকেশন স্তরে build.gradle:

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

আবেদন শ্রেণিতে:

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
    }

}

একটি সহজ উপায় যা আমার পক্ষেও কাজ করে: বাটন.সেটম্পাউন্ডড্রাউয়েবলস উইথ ইন্ট্রিন্সিকবাউন্ডস (getDrawable (R.drawable.ic_ loversite_ white_16dp), নাল, নাল, নাল)
জুআংগাল্ফ

2
আপনি ঠিক বলেছেন, তবে Context#.getDrawable(resId)অবহেলিত, তাই এটি ব্যবহার করা কিছু সমস্যার কারণ হতে পারে।
অ্যামিনোগ্রাফি

অ্যাপ্লিকেশন ক্লাস যুক্ত না করেই কাজ করে যেহেতু আমার কাছে এটি নেই।
মার্ক ডেলফি



4

আমি এটা করেছি:

 // Left, top, right, bottom drawables.
            Drawable[] drawables = button.getCompoundDrawables();
            // get left drawable.
            Drawable leftCompoundDrawable = drawables[0];
            // get new drawable.
            Drawable img = getContext().getResources().getDrawable(R.drawable.ic_launcher);
            // set image size (don't change the size values)
            img.setBounds(leftCompoundDrawable.getBounds());
            // set new drawable
            button.setCompoundDrawables(img, null, null, null);

4

যদি আপনি অঙ্কনযোগ্য স্টার্ট , অঙ্কনযোগ্য , অঙ্কনযোগ্য শীর্ষ বা অঙ্কনযোগ্য নীচে ব্যবহার করছেন ; আপনার অবশ্যই "সেট কম্বাউন্ডড্রেইবলগুলি রিলেটিভ উইথ ইন্ট্রিন্সিকবাউন্ডস " ব্যবহার করতে হবে

edittext.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.anim_search_to_close, 0)

3

আমার জন্য কাজ করেছেন। ডানদিকে অঙ্কনযোগ্য সেট করতে

tvBioLive.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_close_red_400_24dp, 0)

2

@ জারমি রেইনউড নির্দেশ করে যেমন , এই উত্তরে বর্ণিত হিসাবে , অন্য অঙ্কনযোগ্য (শীর্ষ, ডান এবং নীচে) এর মান পরিবর্তন না করেই বাম আঁকতে সক্ষম করার নিরাপদতম উপায়টি সেটক্যাম্পাউন্ডড্রাব্যাবলিজথইন্ট্রিনসিকবাউন্ড সহ বোতামটি থেকে পূর্ববর্তী মানগুলি ব্যবহার করে :

Drawable leftDrawable = getContext().getResources()
                          .getDrawable(R.drawable.yourdrawable);

// Or use ContextCompat
// Drawable leftDrawable = ContextCompat.getDrawable(getContext(),
//                                        R.drawable.yourdrawable);

Drawable[] drawables = button.getCompoundDrawables();
button.setCompoundDrawablesWithIntrinsicBounds(leftDrawable,drawables[1],
                                               drawables[2], drawables[3]);

সুতরাং আপনার সমস্ত পূর্ববর্তী অঙ্কন সংরক্ষণ করা হবে।


2

সম্পাদনা পাঠ্যে বাম আইকনের রঙ পরিবর্তন করতে এবং এটিকে বাম পাশে সেট করার উপায় নীচে দেওয়া হয়েছে।

 Drawable img = getResources().getDrawable( R.drawable.user );
img.setBounds( 0, 0, 60, 60 );
mNameEditText.setCompoundDrawables(img,null, null, null);

int color = ContextCompat.getColor(this, R.color.blackColor);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    DrawableCompat.setTint(img, color);

} else {
    img.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}

1

সহায়ক হতে পারে:

TextView location;
location=(TextView)view.findViewById(R.id.complain_location);
//in parameter (left,top,right,bottom) any where you wnat to put
location.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.arrow,0);

1

একটি কোটলিন এক্সটেনশন যুক্ত করুন

আপনি যদি এটি ঘন ঘন করতে থাকেন তবে একটি এক্সটেনশন যুক্ত করা আপনার কোডটিকে আরও পঠনযোগ্য করে তোলে। বাটন টেক্সটভিউ প্রসারিত করে; আপনি আরও সংকীর্ণ হতে চাইলে বোতামটি ব্যবহার করুন।

fun TextView.leftDrawable(@DrawableRes id: Int = 0) {
    this.setCompoundDrawablesWithIntrinsicBounds(id, 0, 0, 0)
}

এক্সটেনশনটি ব্যবহার করতে, কেবল কল করুন

view.leftDrawable(R.drawable.my_drawable)

যে কোনও সময় আপনাকে সাফ করা দরকার, কোনও প্যারাম পাস করবেন না বা অন্য কোনও এক্সটেনশান কল করা হবে না removeDrawables


0

এটা চেষ্টা কর:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
     fillButton[i].setBackground(getBaseContext().getResources().getDrawable(R.drawable.drawable_name));
}
else {
    fillButton[i].setBackgroundColor(Color.argb(255,193,234,203));
}

-8

এটা চেষ্টা কর:

((Button)btn).getCompoundDrawables()[0].setAlpha(btn.isEnabled() ? 255 : 100);

myEdtiText.setCompoundDrawablesWithIntrinsicBounds (আর .ড্রাব্যাবল.স্মাইলি, 0, 0, 0); কাজ
দেবাশীষ ঘোষ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.