কীভাবে প্রোগ্রামটিমে বোতাম টিন্ট যুক্ত করবেন


120

নতুন অ্যাপক্যাম্প্যাট লাইব্রেরিতে আমরা বোতামটি এইভাবে রঙ করতে পারি:

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/follow"
    android:id="@+id/button_follow"
    android:backgroundTint="@color/blue_100"
    />

আমি কীভাবে প্রোগ্রামটিতে বাটনটির রঙিনটি সেট করতে পারি? আমি মূলত কিছু ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে বোতামটির শর্তযুক্ত রঙিন বাস্তবায়নের চেষ্টা করছি।


আপনি কি নিশ্চিত অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড টিন্ট প্রি-ললিপপটিতে কাজ করছেন? আমি বোতাম এবং অ্যাপকম্প্যাটবটন উভয়ের সাথেই পরীক্ষা করি তবে ব্যাকগ্রাউন্ড টিন্টটি কেবল ললিপপে কাজ করছে বলে মনে হয়।
শারজ

1
দয়া করে এই উত্তরটি পরীক্ষা করুন ।
অমিত বাঘেলা

উত্তর:


162

মতে ডকুমেন্টেশন সাথে সম্পর্কিত পদ্ধতি android:backgroundTintহয় setBackgroundTintList (ColorStateList তালিকা)

হালনাগাদ

কীভাবে রঙের রাজ্য তালিকা সংস্থান তৈরি করবেন তা জানতে এই লিঙ্কটি অনুসরণ করুন ।

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="#your_color_here" />
</selector>

তারপরে এটি লোড করুন

setBackgroundTintList(contextInstance.getResources().getColorStateList(R.color.your_xml_name));

যেখানে contextInstanceএকটি উদাহরণContext


AppCompart ব্যবহার করে

btnTag.setSupportButtonTintList(ContextCompat.getColorStateList(Activity.this, R.color.colorPrimary));

যা কোনও রঙ নয়, তবে একটি কালারস্টেটলিস্ট। কীভাবে কাজে লাগানো যায়?
স্টিফেন

4
আমি এখন এটি কীভাবে করব তা পেয়েছি ধন্যবাদ, তবে অ্যান্ড্রয়েড কেন আপনাকে ম্যানুয়ালি কেবল একটি রঙ ব্যবহার করার অনুমতি দেয় না? আমার কাছে থাকা প্রতিটি বোতামের প্রতিটি রঙের জন্য, আমাকে একটি কালারস্টেটলিস্টের জন্য একটি এক্সএমএল তৈরি করতে হবে? এটি আমার কাছে অপচয় হিসাবে মনে হচ্ছে
স্টিফেন

2
আপনি যদি AppCompatButton এ কল করেন তবে সেটব্যাকগ্রাউন্ডটাইন্টলিস্টের এপিআই 21 দরকার।
শারজ

29
অ্যাপকম্প্যাট সমর্থন লাইব্রেরি একটি স্ট্যাটিক সহায়তা সরবরাহ করে: ViewCompat.setBackgroundTintList(View, ColorStateList)যা এপিআই 4 এ ফিরে সমস্ত উপায় ব্যবহার করা যেতে পারে But তবে এটি কেবলমাত্র প্রয়োগের মতামতের জন্যই কাজ করে TintableBackgroundView, উদাহরণস্বরূপ AppCompatButton(স্বাভাবিকের পরিবর্তে Button)।
জন অ্যাডামস

1
ViewCompat.setBackgroundTintList(View, ColorStateList)ভিউ.সেটসপোর্টবটটনটিন্টলিস্টটি RestrictToটীকা দিয়ে সীমাবদ্ধ থাকায় এখনই, জোন অ্যাডামসের পরামর্শ অনুসারে এখন ব্যবহার আরও বেশি অর্থবোধ করে ।
বিশদগুলি

75

আপনি ব্যবহার করতে পারেন

button.setBackgroundTintList(ColorStateList.valueOf(resources.getColor(R.id.blue_100)));

তবে আমি আপনাকে একটি সাপোর্ট লাইব্রেরির ড্রইং টিন্টিং ব্যবহার করার পরামর্শ দিচ্ছি যা গতকালই মুক্তি পেয়েছে:

Drawable drawable = ...;

// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);

// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);

আপনি এই ব্লগ পোস্টে আরও সন্ধান করতে পারেন (বিভাগ "অঙ্কনযোগ্য রঙিন" দেখুন)


2
আপনি কি ইউআর পদ্ধতিটি ব্যবহার করে রঙিন সেট করতে সম্পূর্ণ কোড সরবরাহ করতে পারেন?
এম উসমান খান

সর্বোত্তম উত্তর...!
গোকুল নাথ কেপি

60

মতামতগুলির শৃঙ্খলা পরিচালনার জন্য নিজস্ব মেকানিক্স রয়েছে বলে মনে হয়, তাই আরও ভালভাবে আভা তালিকা দেওয়া হবে:

ViewCompat.setBackgroundTintList(
    editText, 
    ColorStateList.valueOf(errorColor));

এটি আরও ভালভাবে এভাবে ব্যবহার করা যায়, সুতরাং আপনি API 4 থেকে পিছনে সামঞ্জস্য পাবেন!
xarlymg89

সেরা সমাধান এক।
আতিফ আব্বাসি

21

আসল কোড পরিস্থিতি সরবরাহ করে ডিমসুজের উত্তর সঠিকভাবে প্রসারিত করার জন্য, নীচের কোড স্নিপেট দেখুন:

    Drawable buttonDrawable = button.getBackground();
    buttonDrawable = DrawableCompat.wrap(buttonDrawable);
    //the color is a direct color int and not a color resource
    DrawableCompat.setTint(buttonDrawable, Color.RED);
    button.setBackground(buttonDrawable);

এই সমাধানটি সেই দৃশ্যের জন্য যেখানে বোতামের পটভূমি হিসাবে কোনও অঙ্কনযোগ্য ব্যবহার করা হয়। এটি প্রি-ললিপপ ডিভাইসেও কাজ করে।


@ ট্রুপটিনাসিত এটি শুনে খুশী।
Shayne3000

আমার জন্য কাজ করেছেন। ধন্যবাদ.
ওয়েসলি

1
@ ওয়েসলিফ্র্যাঙ্কস আপনাকে স্বাগতম শুনতে ভাল লাগছে এটা কাজ করে।
Shayne3000

7

আপনি কি এরকম কিছু চেষ্টা করেছেন?

button.setBackgroundTintList(getResources().getColorStateList(R.id.blue_100));

নোট করুন যে getRes উত্স () কেবলমাত্র একটি ক্রিয়াকলাপে কাজ করবে। তবে এটি প্রতিটি প্রসঙ্গেও বলা যেতে পারে।


আপনি এখানে বর্ণিত হিসাবে একটি এক্সএমএল তৈরি করতে পারেন: developer.android.com/references/android/content/res/…
ক্রিস কে।

getColorStateList অবহেলিত বলে মনে হচ্ছে।
মেঘসুরফিন

1
সেটব্যাকগ্রাউন্ডটিন্টলিস্টের মনে হচ্ছে এপিআই স্তর 21
ন্যাসে

1
বোতাম। সেটব্যাকগ্রাউন্ডটিন্টলিস্ট (কনটেক্সটকম্প্যাট.জেট কালার স্টেটলিস্ট (প্রসঙ্গ, আরক্লোর.ব্লু)); আমার জন্য কাজ করেছেন
jesto paul


5

আপনি অঙ্কনযোগ্য কমপ্যাট যেমন ব্যবহার করতে পারেন

public static Drawable setTint(Drawable drawable, int color) {
    final Drawable newDrawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(newDrawable, color);
    return newDrawable;
}

5

এটি সহজেই ম্যাটেরিয়াল ডিজাইনের লাইব্রেরি থেকে নতুন ম্যাটারিয়াল বোতামে পরিচালনা করা হয়, প্রথমে নির্ভরতা যুক্ত করুন:

implementation 'com.google.android.material:material:1.1.0-alpha07'

তারপরে আপনার এক্সএমএলে আপনার বোতামটির জন্য এটি ব্যবহার করুন:

<com.google.android.material.button.MaterialButton
    android:id="@+id/accept"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/i_accept"
    android:textSize="18sp"
    app:backgroundTint="@color/grayBackground_500" />

এবং আপনি যখন রঙ পরিবর্তন করতে চান, কোটলিনে কোডটি এখানে রয়েছে, এটি অবহেলা করা হয়নি এবং এটি অ্যান্ড্রয়েড 21 এর আগে ব্যবহার করা যেতে পারে:

accept.backgroundTintList = ColorStateList.valueOf(ResourcesCompat.getColor(resources, 
R.color.colorPrimary, theme))

পাঠ্য রঙের জন্য কি একই রকম আছে?
অ্যান্ড্রয়েড বিকাশকারী

আপনি একটি বোতাম হিসাবে পাঠ্য বোঝাতে চান এবং আপনি পটভূমির রঙ পরিবর্তন করতে চান?
আমিন কেশ্বরজিয়ান

4

আমার কাজে যেভাবে কাজ করতে পেরেছি তা হ'ল ব্যবহার করে CompoundButtonCompat.setButtonTintList(button, colour)

আমার বোঝার জন্য এন্ড্রয়েড সংস্করণ নির্বিশেষে এটি কাজ করে।


3

আমারও একই সমস্যা ছিল। আমি একটি বর্ণ (রঙ) এর উপর ভিত্তি করে একটি দৃশ্যের জন্য জটিল অঙ্কনযোগ্য পটভূমি রঙ করতে চেয়েছি। কোডটি ব্যবহার করে আমি সফল হয়েছিলাম:

ColorStateList csl = new ColorStateList(new int[][]{{}}, new int[]{color});
textView.setBackgroundTintList(csl);

যেখানে রঙ হল একটি অন্তর্গত মান যা প্রয়োজনীয় রঙের প্রতিনিধিত্ব করে। এটি সাধারণ এক্সএমএল রঙিন স্টেটলিস্ট উপস্থাপন করে:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:color="color here"/>
</selector>

আশাকরি এটা সাহায্য করবে.


2
ন্যূনতম প্রয়োজনীয় এপিআই স্তরের 21
17:34

ভাল আপনি কেবল ব্যবহার করতে পারেনColorStateList.valueOf(ColorInt)
user924

2

ইমেজবটনের জন্য আপনি ব্যবহার করতে পারেন:

favoriteImageButton.setColorFilter(Color.argb(255, 255, 255, 255)); // White Tint

সেট কালারফিল্টার বাটনগুলির জন্য সংজ্ঞায়িত করা হয়নি
জার্মি

এটি ইমেজবাটনের জন্য।
সৌরভ সিং

ওহ, আমি এটি সম্পর্কে জানতাম না। তবে ওপি বাটন চাইছে। আপনি কি আমার উত্তরটি এই বিশদটি দিয়ে সম্পাদনা করতে পারবেন যাতে আমি আমার ডাউনটোটটি সরাতে পারি?
জার্মি

2

আপনি যদি ব্যবহার করেন Kotlinএবং Material Design, আপনি MaterialButtonএই জাতীয় রঙ পরিবর্তন করতে পারেন :

myButton.background.setTintList(ContextCompat.getColorStateList(context, R.color.myColor))

MaterialButtonআপনাকে কোডটি আরও পাঠযোগ্য এবং আপনার কোডিংটি আরও সুবিধাজনক করার জন্য আপনার জন্য একটি এক্সটেনশন ফাংশন তৈরি করে আপনি এটি আরও উন্নত করতে পারেন:

fun MaterialButton.changeColor(color: Int) {
    this.background.setTintList(ContextCompat.getColorStateList(context, color))
}

তারপরে, আপনি আপনার ফাংশনটি এই যে কোনও জায়গায় ব্যবহার করতে পারেন:

myButton.changeColor(R.color.myColor)

1

শায়েন 3000 এর উত্তর ছাড়াও আপনি একটি রঙের সংস্থান (শুধুমাত্র কোনও অন্তর্ রং নয়) ব্যবহার করতে পারেন। কোটলিন সংস্করণ:

var indicatorViewDrawable = itemHolder.indicatorView.background
indicatorViewDrawable = DrawableCompat.wrap(indicatorViewDrawable)
val color = ResourcesCompat.getColor(context.resources, R.color.AppGreenColor, null) // get your color from resources
DrawableCompat.setTint(indicatorViewDrawable, color)
itemHolder.indicatorView.background = indicatorViewDrawable

0

এখানে প্রস্তাবিত উত্তর অ্যান্ড্রয়েড 5.0-তে সঠিকভাবে কাজ করে না যদি আপনার এক্সএমএল ভিত্তিক রঙের রাজ্যের তালিকা থিমযুক্ত বৈশিষ্ট্যগুলি উল্লেখ করে ... উদাহরণস্বরূপ, আমার মতো একটি এক্সএমএল রঙের রাজ্যের তালিকা রয়েছে:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?colorPrimary" android:state_enabled="true"/>
    <item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>

এক্সএমএল থেকে আমার পটভূমি হিসাবে এটি ব্যবহার করা অ্যান্ড্রয়েড 5.0 এবং অন্য কিছুর জন্য ঠিক কাজ করে just তবে আমি যদি কোডের মতো এটিকে সেট করার চেষ্টা করি:

(এটি করবেন না)

myButton.setSupportButtonTintList(ContextCompat.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));

আমি ক্রিয়াকলাপ বা কনটেক্সট কমপ্যাট.জেট কালার স্টেটলিস্ট () পদ্ধতিতে বাটনের প্রসঙ্গটি পাস করি তা আসলে কিছু যায় আসে না, তবুও আমাকে বাটনটির মধ্যে থাকা থিমের সাথে সঠিক রঙের রাজ্য তালিকা দেবে না। রঙিন রাজ্যের তালিকায় থিম বৈশিষ্ট্যগুলি ব্যবহার করা এপিআই 23 অবধি সমর্থন করা হয়নি এবং কনটেক্সট কমপ্যাট এগুলি সমাধান করার জন্য বিশেষ কিছু করে না This পরিবর্তে আপনাকে অবশ্যই অ্যাপকোম্প্যাটআরসোস.জেট কালার স্টেটলিস্ট () ব্যবহার করতে হবে যা ডিভাইসের <API 23 এর নিজস্ব রিসোর্স পার্সিং / থিম অ্যাট্রিবিউট রেজোলিউশন করে।

পরিবর্তে, আপনি এটি ব্যবহার করতে হবে:

myButton.setSupportBackgroundTintList(AppCompatResources.getColorStateList(myButton.getContext(), R.color.btn_tint_primary));

টিএলডিআর: অ্যান্ড্রয়েডের সমস্ত এপিআই সংস্করণ জুড়ে থিমযুক্ত সংস্থানগুলি সমাধান করার দরকার হলে অ্যাপকম্প্যাটআরসোর্সগুলি ব্যবহার করুন এবং কনটেক্সটকম্প্যাট নয়।

বিষয়ে আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.