অপি <21 এর জন্য অঙ্কনযোগ্য টিন্টিং


84

এপিআই 21 21 এর জন্য অঙ্কনযোগ্য টিন্টিংয়ের কাজ করা কি সম্ভব?

<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/ic_calendar"
    android:tint="@color/primary" />

কেবলমাত্র সূক্ষ্মভাবে কাজ করে তবে কেবলমাত্র API21 সহ ডিভাইসগুলির জন্য। লো এপিআই ডিভাইস বা অ্যাপকোম্প্যাট সমর্থনের জন্য কোনও কার্যকারিতা? কিছুই খুঁজে পাচ্ছি না।

উত্তর:


106

এর AppCompatImageViewমতো ব্যবহার করুন :

<android.support.v7.widget.AppCompatImageView
        android:id="@+id/my_appcompat_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/my_image"
        android:tint="#636363"
    />

appcompat-v7আপনার অ্যাপ্লিকেশনটিতে সর্বশেষতমটি রয়েছে তা নিশ্চিত করুন build.gradle

উদাহরণ: compile 'com.android.support:appcompat-v7:25.0.0'আপনার অ্যাপ্লিকেশনগুলিতে build.gradle


66
AppCompatImageViewদস্তাবেজগুলি থেকে : This will automatically be used when you use ImageView in your layouts. You should only need to manually use this class when writing custom views. বিকাশকারী.অ্যান্ড্রয়েড. com/references/android/support/v7/widget/… সুতরাং, লেআউটটিতে সাধারণ ব্যবহার করা ImageViewঠিক কাজ করা উচিত।
নিমরোড দয়ান

4
@ নিম্রোদদায়ান উপরে উল্লিখিত হিসাবে, এটি প্রয়োজনীয় হওয়া উচিত নয়। আমি অ্যান্ড্রয়েডের প্রতিবেদন পাচ্ছি: তবে একটি স্যামসাং এ 5 এবং মোটো জি-তে টিন্ট্ট কাজ করছে না, তবে (অ্যাপকম্প্যাট-ভি 7: 23.4.0 ব্যবহার করে), তাই সম্ভবত কিছু ডিভাইসে চিত্রকল্পগুলি সঠিকভাবে প্রতিস্থাপন করা হচ্ছে না।
স্টিফেন কিডসন

@ স্টেফেনকিডসন, আমি একই সংস্করণ অ্যাপকম্প্যাটটি ব্যবহার করছি এবং অজানা ব্র্যান্ডের ডিভাইসে একই সমস্যাটিতে ঝাঁপিয়ে পড়েছি। আপনি কি এটি সমাধান করতে পরিচালনা করেছেন? আমি আশ্চর্য হই যে এটি সম্পর্কে কোনও বাগ রিপোর্ট করা আছে ...
নিমরোদ দয়ান

4
এটি অ্যাপকম্প্যাট-ভি 7: 25.1.0 ব্যবহার করে এমুলেটর অ্যান্ড্রয়েড 4.0 এ কাজ করে নি।
পিটারডকে

4
অ্যাপকম্প্যাট আইমেজভিউ কোনও উইজেটের অভ্যন্তরে ব্যবহার করা যায় না। ইমেজভিউতে সেট কালারফিল্টার ব্যবহার করুন।
ম্যাসিমো

46

আপনি উত্স কোড ব্যবহার করে এটি অর্জন করতে পারেন। পূর্বে টিংটিং দ্বারা সমর্থিত ছিল না DrawableCompat। সমর্থন লাইব্রেরি 22.1 থেকে শুরু করে আপনি এটি করতে পারেন, তবে আপনার এটি এইভাবে করা দরকার:

Drawable normalDrawable = getResources().getDrawable(R.drawable.drawable_to_tint);
Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable);
DrawableCompat.setTint(wrapDrawable, getResources().getColor(R.color.colorPrimaryLight));

18
আপনার যদি <21 এপিআইতে টিংটিং সমর্থন করতে হয় তবে আপনি সম্ভবত এর ContextCompat.getColor()পরিবর্তে ব্যবহার করতে চান getResources().getColor()
সেবাদাস্তন সাবন্যুক

22

আপনার ড্রয়যোগ্যটি প্রদর্শন করার জন্য আপনি কি কেবল একটি চিত্রদর্শন ব্যবহার করতে পারবেন না? android:tintপুরানো এপিআই স্তরে কাজ করে works

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_calendar"
    android:tint="@color/primary"
    />

4
আমি চিত্রটি দেখুন - এটিতে আইকন প্রদর্শন করতে। এই আইকনগুলি আমার নেভিগেশন ড্রয়ারের উপাদানগুলির একটি অংশ। এবং নেভিগেশন ড্রয়ারে নির্বাচিত আইটেমটির রঙ ভিন্ন, তাই আমি প্রতিটি আইকন রঙিন এবং প্রতিটি আইকনের জন্য নির্বাচকও তৈরি করেছি। এবং আমি আমার আইকন জন্য নির্বাচক ব্যবহার করছি। নির্বাচক:<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@drawable/ic_home_tinted" /> <item android:drawable="@drawable/ic_home" /> </selector>
ম্যাটটো

@ ওরোচি আমার উত্তরটি একবার দেখুন যেমন এটি সরাসরি গুগলের ব্লগ থেকে আসে। এটি মূলত কেবল অ্যান্ড্রয়েড 5.0+ এ কাজ করে তবে প্রাক অ্যান্ড্রয়েড 5.0 চলমান ডিভাইসের জন্য কিছু উইজেটে কাজ করতে পারে।
জ্যারেড বুরোজ

@ ওরোচি আপনাকে একই প্রভাব "অনুকরণ" করতে কাস্টম ভিউ করতে হবে।
জ্যারেড বুরোজ

4
আপনি একটি চিত্রের ভিউ ব্যবহার করতে পারবেন, আইকনটিকে যতটা সম্ভব সাদা করতে এবং আইভিসেট কালারফিল্টার (আপনার রঙ, মোড.মલ્ટ্টিপ্লাই) দিয়ে আপনার পছন্দ মতো কোনও রঙ তৈরি করতে পারেন; নিশ্চিত করুন যে আপনি
অ্যান্ড্রয়েড.গ্রাফিক্স.পোর্টারডাফ.মড

4
এখানেও একই সমস্যা। দুঃখজনকভাবে নির্বাচকের সাথে রঙিন এপি <21
লুস্কাস

17

এখানে আগে অনুরূপ প্রশ্ন জিজ্ঞাসা করা হয়েছিল: https://stackoverflow.com/a/26533340/950427

অ্যান্ড্রয়েড অঙ্কনযোগ্য টিংটিং কেবলমাত্র Android 5.0+ (API 21+) এ সমর্থিত + (এটি বলে " At the moment this is limited to coloring the action bar and some widgets.")।

থিমিং

...

আপনি যখন এই বৈশিষ্ট্যগুলি সেট করেন, অ্যাপকম্প্যাটটি স্বয়ংক্রিয়ভাবে এআইপি 21+ এর ফ্রেমব্যাট বৈশিষ্ট্যে তাদের মানগুলি প্রচার করে। এটি স্ট্যাটাস বার এবং ওভারভিউ (রিসেন্টস) টাস্ক এন্ট্রিটিকে স্বয়ংক্রিয়ভাবে রঙ করে।

পুরানো প্ল্যাটফর্মগুলিতে, অ্যাপকম্প্যাটটি যেখানে সম্ভব রঙিন থিমিংয়ের অনুকরণ করে। এই মুহুর্তে এটি অ্যাকশন বার এবং কিছু উইজেট রঙ করার মধ্যে সীমাবদ্ধ।

এবং

উইজেট রঙিন

অ্যান্ড্রয়েড 5.0 এর সাথে ডিভাইসগুলিতে চলাকালীন, সমস্ত উইজেটগুলি রঙিন থিমের বৈশিষ্ট্যগুলি নিয়ে আমরা রঙিন করে ব্যবহার করেছি। দুটি প্রধান বৈশিষ্ট্য রয়েছে যা ললিপপ এ এটিকে মঞ্জুরি দেয়: অঙ্কনযোগ্য টিন্টিং, এবং আঁকতে সক্ষম থিমের বৈশিষ্ট্যগুলি (ফর্মের? অ্যাট্রি / ফু))

অ্যাপকম্প্যাটটি ইউআই উইজেটের উপসেটের জন্য অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে অনুরূপ আচরণ সরবরাহ করে:

অ্যাপকম্প্যাটটির সরঞ্জামদণ্ড (অ্যাকশন মোডস, ইত্যাদি) দ্বারা সরবরাহিত সমস্ত কিছু সম্পাদনা পাঠ্য স্পিনার চেকবক্স রেডিওবটন স্যুইচ করুন (নতুন android.support.v7.widget.SwitchCompat ব্যবহার করুন) চেকডটেক্সটভিউ এই কাজগুলি করার জন্য আপনার বিশেষ কিছু করার দরকার নেই, কেবলমাত্র এই নিয়ন্ত্রণগুলি ব্যবহার করুন আপনার লেআউটগুলি যথারীতি এবং অ্যাপকম্প্যাটটি বাকী কাজ করবে (কিছু সাবধানতার সাথে; নীচে FAQ দেখুন)।

সূত্র:

http://android-developers.blogspot.com/2014/10/appcompat-v21-matory-design-for-pre.html

https://chris.banes.me/2014/10/17/appcompat-v21/


কেন এই নিম্নমানের ছিল? এটি সরকারী ডকুমেন্টেশন থেকে।
জ্যারেড বুরোস

উত্তর পুরানো। @ জোনিকের উত্তরের মতই ImageViewএখন android:tintঅ্যাপকম্প্যাটের মাধ্যমে সমর্থন করে ।
ভিকি চিজওয়ানি

@ উইকিচিজওয়ানি একটি সম্পাদনা জমা দিন। এবং আপনি বলতে চান AppCompatImageView, না ImageView
জারেড বুরোজ

13

এখন অ্যাপকম্প্যাটআইজেজভিউ, অ্যাপকম্প্যাটবটনটি নিম্ন এপিআই সহ ডিভাইসে টিন্ট সমর্থন করার জন্য ইমেজভিউ, বোতামটি প্রতিস্থাপন করবে। আরও তথ্যের জন্য লিঙ্কটি চেক করুন অ্যাপকম্প্যাটআইজেজভিউ , অ্যাপকম্প্যাটবটন


6

রঙিন চিত্রগুলির জন্য আপনি ব্যবহার করতে পারেন imageView.setColorFilter(int color)। এটি এপিআই 8 থেকে কাজ করে এবং আমার কালো চিত্রটিকে আমার পছন্দ মতো রঙে রঙিন করার জন্য কাজ করেছে। এটি প্রতিস্থাপন করতে পারে setImageTintList()তবে কেবল ব্যবহারেও android:tintকাজ করা উচিত।


6

এই নেমস্পেস
xMLns ব্যবহার করুন : অ্যাপ = "http://schemas.android.com/apk/res-auto"

এবং পরে আপনি প্রতিটি অ্যান্ড্রয়েড প্রতিস্থাপন করতে পারেন: অ্যাপ্লিকেশন দিয়ে: রঙ করুন int এটি আমার জন্য সমস্যার সমাধান করুন।


4

আমি একটু দেরি করছি তবে এটি কীভাবে করবেন তা এখানে।

val textInput = EditText(context)

val drawable = ContextCompat.getDrawable(context, R.drawable.your_drawable)
drawable?.let {
    myDrawable -> DrawableCompat.setTint(myDrawable, ContextCompat.getColor(context, R.color.your_color))
    textInput.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, myDrawable, null)
}

1

এটি আপনার ইচ্ছা অনুসারে করবে এবং সমর্থন লাইব্রেরির সমস্ত অ্যান্ড্রয়েড সংস্করণে কাজ করা উচিত:

@JvmStatic
fun getTintedDrawable(inputDrawable: Drawable, @ColorInt color: Int): Drawable {
    val wrapDrawable = DrawableCompat.wrap(inputDrawable.mutate())
    DrawableCompat.setTint(wrapDrawable, color)
    DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN)
    return wrapDrawable
}

1

যদি কেউ নতুন অঙ্কনযোগ্য (টিন 1, টিন্ট 2 ..) তৈরি করতে চান তবে এটি চেষ্টা করে দেখুন

<?xml version="1.0" encoding="utf-8"?>
<bitmap
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:src="@drawable/your_image"
  android:tint="@color/tint_color">
   </bitmap>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.