একটি অঙ্কনযোগ্য থেকে শৈলী বৈশিষ্ট্য রেফারেন্স কিভাবে?


98

আমি আমার অ্যাপ্লিকেশনটির জন্য 2 টি নির্বাচনযোগ্য থিম রাখতে চাই। এটি করার জন্য, আমি এই জাতীয় কিছু বৈশিষ্ট্য সংজ্ঞায়িত করেছি:

 <attr format="color" name="item_background" />

তারপরে, আমি উভয় থিম তৈরি করেছি, এর মতো:

  <style name="ThemeA">
     <item name="item_background">#123456</item>
 </style>

 <style name="ThemeB">
     <item name="item_background">#ABCDEF</item>
 </style>

এই পদ্ধতিটি দুর্দান্ত কাজ করে, আমাকে বেশ কয়েকটি থিম সহজেই তৈরি এবং সংশোধন করার অনুমতি দেয়। সমস্যাটি হ'ল মনে হচ্ছে এটি কেবলমাত্র ভিউগুলিতে ব্যবহার করা যেতে পারে, এবং ড্রয়যোগ্যগুলিতে নয়

উদাহরণস্বরূপ, একটি বিন্যাসের অভ্যন্তরীণ ভিউ থেকে একটি মান উল্লেখ করা কাজ করে:

 <TextView android:background="?item_background" />

তবে অঙ্কনযোগ্যতে একই কাজটি করে না:

 <shape android:shape="rectangle">
     <solid android:color="?item_background" />
 </shape>

অ্যাপ্লিকেশনটি চালানোর সময় আমি এই ত্রুটিটি পেয়েছি:

    java.lang.UnsupportedOperationException: Can't convert to color: type=0x2

?item_backgroundআমি পরিবর্তে যদি একটি হার্ডকোডযুক্ত রঙ ব্যবহার করি তবে এটি কার্যকর হয় তবে এটি আমার থিমগুলি ব্যবহার করতে দেয় না। আমি চেষ্টাও করেছি ?attr:item_background, কিন্তু একই ঘটনা ঘটে।

আমি এই কিভাবে করতে পারে? এবং এটি দৃশ্যগুলিতে কিন্তু ড্রয়যোগ্যগুলিতে নয় কেন? ডকুমেন্টেশনের কোথাও আমি এই সীমাবদ্ধতাটি খুঁজে পাচ্ছি না ...


এই নিচের প্রশ্নগুলোর সদৃশ হতে পারে stackoverflow.com/questions/7529574/...
পল Lammertsma

@ মার্টিন এম। আপনি এটিকে কী বুঝতে পেরেছেন?
ব্যবহারকারী 123321

এখনও এর কোন সমাধান? আমি ঠিক একই প্রাচীরটি আঘাত করছি
গিলিয়াম

এখানে আরও একটি সাম্প্রতিক প্রশ্ন: stackoverflow.com/q/12115125/317889 একই সমস্যা। গুগল এটি বাছাই।
এইচজিবিবি

4
স্পষ্টতই এই সমস্যাটি এখানে বর্ণিত
বিয়ানকা ড্যানিসিক

উত্তর:


165

আমার অভিজ্ঞতায় কোনও এক্সএমএল অঙ্কনযোগ্যতে কোনও গুণকে উল্লেখ করা সম্ভব নয়।
আপনার থিমটি তৈরি করতে আপনার প্রয়োজন:

  • প্রতি থিমের জন্য একটি এক্সএমএল অঙ্কনযোগ্য তৈরি করুন।
  • সরাসরি রঙে @colorট্যাগ বা # আরজিবি ফর্ম্যাটের সাহায্যে আপনার প্রয়োজনীয় রঙটি অন্তর্ভুক্ত করুন ।

Attrs.xML এ আপনার অঙ্কনযোগ্যের জন্য একটি বৈশিষ্ট্য তৈরি করুন ।

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <!-- Attributes must be lowercase as we want to use them for drawables -->
   <attr name="my_drawable" format="reference" />
</resources>

আপনার থিম.এক্সএমএলে আপনার ছবি আঁকার যোগ করুন ।

<style name="MyTheme" parent="@android:style/Theme.NoTitleBar">
   <item name="my_drawable">@drawable/my_drawable</item>
</style>

আপনার অ্যাট্রিবিউটটি ব্যবহার করে আপনার বিন্যাসে আপনার অঙ্কনযোগ্য রেফারেন্স করুন।

<TextView android:background="?my_drawable" />

20
দেখে মনে হচ্ছে, আপনি যদি সামঞ্জস্যতা বজায় রাখতে চান তবে এই সমাধানটি এখনও প্রয়োজনীয় ... হ্যাঁ এল থেকে এটি ঠিক করা হয়েছে এবং থিম রঙটি ভালভাবে রেফারেন্স করা হয়েছে তবে একই কোডটি বিভিন্ন প্রাক-এল ডিভাইসে চলে এবং আসলে অ্যাটর রেফারেন্সটি কাজ করে না প্রাক এল ডিভাইস! লো .. সুতরাং আমার পক্ষে এটি ঠিক করা হয়নি যদি যাইহোক আমাকে আলাদা আলাদা আঁকিয়ে রাখতে হয়।
ডেভিডাস

4
আমি আশা করি আমি এই দুটি বার upvote করতে পারে। হার্ডকডযুক্ত # আরজিবি পরিবর্তে রেফারেন্সগুলি ব্যবহার করতে কেবল আমার আকারগুলি প্রবাহিত করার চেষ্টা করেছি এবং একই ত্রুটি পেয়েছি। একটি সমাধানের জন্য এসও এ এসেছিলেন এবং এই একই উত্তরটি পেয়েছি যে আমি 2 সপ্তাহ আগে উন্নীত করেছি! (facepalm)
Tiksi

4
এই সুপার নিঞ্জা!
মারিউসউদ্দিন

4
এআরজিএইচ! এটির জন্য ব্যাকপোর্ট-ফিক্স তৈরি করা গুগলের পক্ষে শীর্ষস্থানীয় হওয়া উচিত! ? অ্যাটর-রেফারেন্স নোটেশনটি এতটাই দরকারী এবং গুরুত্বপূর্ণ যে এটি যদি আপনার কোনও অ্যাপের মধ্যে একাধিক থিম না থাকে তবে এটি বেঁচে থাকা অসম্ভবের কাছাকাছি। এখনই আমাকে কাস্টম বোতামের প্রতিটি ধরণের জন্য তিনটি ড্রএল এক্সএমএল তৈরি করতে হবে!
স্টিফান হেনিংসেন

4
আমি চাই। <21 এসডিকে খুব সহজ এবং সুন্দর সমাধান।
আদনান আবদুল্লাহ জাকী

20

lollipop(এপিআই 21) দিয়ে শুরু করে এই বৈশিষ্ট্যটি সমর্থিত, https://code.google.com/p/android/issues/detail?id=26251 দেখুন

তবে, আপনি যদি ললিপপ ছাড়াই ডিভাইসগুলি লক্ষ্য করে থাকেন তবে এটি ব্যবহার করবেন না, কারণ এটি ক্রাশ হবে, পরিবর্তে স্বীকৃত উত্তরে workaround ব্যবহার করুন।


প্রি এল এপিআইতে কাজ করার জন্য কি কোনও ধরণের সমর্থন লাইব্রেরি ব্যবহার করার সুযোগ রয়েছে?
ইভান

4
না, সমর্থন লাইব্রেরি এপিআইয়ের একটি সেট যা পুরানো ডিভাইসে ব্যবহার করা যেতে পারে, এই আচরণ পরিবর্তনটি সংকলক এবং বিল্ড সরঞ্জামগুলিতে রয়েছে, সুতরাং এটি সমর্থন লাইব্রেরির সাথে সম্পর্কিত নয়।
মারমোর

4
না, ললিপপে এটি কোনও বাস্তবায়িত বৈশিষ্ট্য ছিল না, তবে এক ঝলকপূর্ণ বাগ সমাধান। এবং এটি একটি গুরুতর বাগ।
অ্যাড্রিয়ান সিকারু

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

4

প্রি-ললিপপ ডিভাইসগুলিতে অঙ্কনযোগ্য থেকে স্টাইল বৈশিষ্ট্যগুলি উল্লেখ করা সম্ভব না হলেও রঙের রাজ্যের তালিকাগুলির পক্ষে এটি সম্ভব। আপনি অ্যান্ড্রয়েড সমর্থন লাইব্রেরি থেকে অ্যাপকম্প্যাটআরসোস.জেট কালার স্টেটলিস্ট (প্রসঙ্গে প্রসঙ্গ, ইন পুনরায় সংযুক্তি) পদ্ধতি ব্যবহার করতে পারেন । নেতিবাচকতা হ'ল আপনাকে সেই রঙের রাজ্যের তালিকাটি প্রোগ্রামিয়ালি সেট করতে হবে।

এখানে একটি খুব বেসিক উদাহরণ।

color / my_color_state.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_checked="true" android:color="?colorControlActivated" />
  <item android:color="?colorControlNormal" />
</selector>

একটি উইজেট যার একটি রঙের রাজ্যের তালিকা প্রয়োজন:

<RadioButton
  android:id="@+id/radio_button"
  android:text="My Radio" />

এবং সবচেয়ে গুরুত্বপূর্ণ:

ColorStateList csl = AppCompatResources.getColorStateList(context, R.color.my_color_state);    
RadioButton r = (RadioButton) findViewById(R.id.radio_button);
r.setTextColor(csl);

ওয়েল, সবচেয়ে মার্জিত বা সংক্ষিপ্ততম উপায় নয়, তবে অ্যান্ড্রয়েডের পুরানো সংস্করণগুলিতে (প্রাক-ললিপপ) এ কাজ করতে অ্যান্ড্রয়েড সমর্থন লাইব্রেরি এটি করে does

দুর্ভাগ্যক্রমে, অঙ্কনযোগ্যদের জন্য অনুরূপ পদ্ধতি স্টাইল বৈশিষ্ট্যের সাথে কাজ করে না।


2

আমি একই প্রশ্নের উত্তর https://stackoverflow.com/a/59467269/3841352 এ দিয়েছি তবে আমি এখানেও এটি পোস্ট করব:

আমি একই সমস্যার মুখোমুখি হয়েছি এবং ২০১২ সালের হিসাবে এটি সমাধান করা হয়নি সুতরাং আপনি নির্বাচককে অঙ্কনযোগ্য হিসাবে কোনও বৈশিষ্ট্য উল্লেখ করতে পারবেন না। আমি যে সমস্যার সমাধান পেয়েছি তা ভাগ করে নেব কারণ এটি এখানে পোস্ট করা দেখছি না। আমি এটি বাগ রিপোর্টের শেষ মন্তব্যে পেয়েছি ।

কার্যতালিকাটি মূলত একটি অঙ্কনযোগ্য সংস্থান তৈরি করে যা বৈশিষ্ট্যটির মান উল্লেখ করে।

আপনার ক্ষেত্রে চিত্রিত করার জন্য সমাধানটি এর পরিবর্তে হবে:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="?attr/colorPrimary" android:state_enabled="true" android:state_window_focused="false"/>
    <item android:drawable="?attr/colorPrimaryDark" android:state_pressed="true"/>
    <item android:drawable="@android:color/darker_gray" android:state_enabled="false"/>
    <item android:drawable="?attr/colorPrimary"/>
</selector>

আপনি একটি অঙ্কনযোগ্য উত্সের জন্য? অ্যাট্রি / * প্রতিস্থাপন করবেন:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/colorPrimaryDrawable" android:state_enabled="true" android:state_window_focused="false"/>
    <item android:drawable="@drawable/colorPrimaryDarkDrawable" android:state_pressed="true"/>
    <item android:drawable="@android:color/darker_gray" android:state_enabled="false"/>
    <item android:drawable="@drawable/colorPrimaryDrawable"/>
</selector>

অঙ্কনযোগ্যগুলি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হবে:

অঙ্কনযোগ্য / রঙপ্রিমাত্রি ড্রয়যোগ্য

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle">
    <solid android:color="?attr/colorPrimary" />
</shape>

অঙ্কনযোগ্য / রঙপ্রিমারিরড্রাকড্রেবল

<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle">
    <solid android:color="?attr/colorPrimaryDark" />
</shape>

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


0

যেমনটি @ মারমোর জানিয়েছেন যে এটি এখন এপিআই 21-এ সমর্থিত But ভি 7 সমর্থন লাইব্রেরি ব্যবহার করে আপনি এখনও এটি সর্বনিম্ন এসডিকে স্তর সহ অ্যাপ্লিকেশনগুলিতে 7 এর নিচে ব্যবহার করতে পারেন।

AppCompatImageViewV7 মধ্যে অ্যান্ড্রয়েড সাপোর্ট লাইব্রেরী এই বৈশিষ্ট্যটির একটি বাগ বিনামূল্যে বাস্তবায়ন হয়েছে। কেবলমাত্র আপনার ব্যবহারগুলির প্রতিস্থাপন ImageViewসঙ্গে AppCompatImageView


4
আশাবাদী! তবে সমস্যাটি দৃশ্য হিসাবে নয় ড্রয়যোগ্য আকারে। আমার কাছে একটি অ্যাপকম্প্যাট ভিউ রেফারেন্সিং রয়েছে (পটভূমি হিসাবে) এমন একটি আকার যা থিমযুক্ত রঙ পেতে অ্যাটর ব্যবহার করে এবং এটি উপরের ত্রুটিটি <21 এর উপর পড়ে। আমি কি মিস করেছি এমন একটি অ্যাপক্যাম্প্যাট ড্রয়িং আছে?
নিলস

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