টেক্সটভিউয়ের পটভূমির রঙে নির্বাচক


121

আমি TextViewযখন ব্যবহারকারী এটিকে স্পর্শ করি তখন আমি একটি অ্যান্ড্রয়েড উইজেটের পটভূমি রঙ পরিবর্তন করার চেষ্টা করছি । আমি সেই উদ্দেশ্যে একটি নির্বাচক তৈরি করেছি, যা এতে সঞ্চিত res/color/selector.xmlএবং মোটামুটি দেখাচ্ছে:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:color="@color/semitransparent_white"
        />
    <item
        android:color="@color/transparent"
        />
</selector>

এর clickableবৈশিষ্ট্যটি TextViewহ'ল trueআগ্রহের ক্ষেত্রে।

আমি যখন এই নির্বাচককে কোনও TextViewহিসাবে android:background="@color/selector"নিযুক্ত করি তখন রানটাইমে নিম্নলিখিত ব্যতিক্রমগুলি পাচ্ছি:

ত্রুটি / অ্যান্ড্রয়েডআরআনটাইম (13130): এর কারণ: org.xmlpull.v1.XMLPullParserException: বাইনারি এক্সএমএল ফাইল লাইন # 6: ট্যাগের জন্য একটি 'অঙ্কনযোগ্য' বৈশিষ্ট্য বা চাইল্ড ট্যাগের প্রয়োজন একটি অঙ্কনীয়কে সংজ্ঞায়িত করতে

আমি যখন অঙ্কনযোগ্যটিতে বৈশিষ্ট্যটি পরিবর্তন করি, এটি কাজ করে তবে ফলাফলটি সম্পূর্ণরূপে ভুল দেখাচ্ছে কারণ আইডিগুলি রঙিন রেফারেন্সের পরিবর্তে চিত্রের রেফারেন্স হিসাবে ব্যাখ্যা করা হয় বলে মনে হয় ("অঙ্কনযোগ্য" পরামর্শ হিসাবে)।

যা আমাকে বিভ্রান্ত করে তা হ'ল আমি কোনও রঙের রেফারেন্স সেট করতে পারি, যেমন "@ রঙ / কালো", ব্যাকগ্রাউন্ড বৈশিষ্ট্য হিসাবে সরাসরি। এটি প্রত্যাশার মতো কাজ করছে। নির্বাচক ব্যবহার করে কাজ হয় না।

আমি textColorসমস্যা ছাড়াই নির্বাচককে ব্যবহার করতে পারি ।

TextViewঅ্যান্ড্রয়েডে কোনও ব্যাকগ্রাউন্ড-রঙ-নির্বাচক প্রয়োগ করার সঠিক উপায় কী ?


একটি রঙ একটি অঙ্কনযোগ্য হিসাবে ব্যাখ্যা করা যেতে পারে। ফলাফলটি ঠিক কীভাবে ভুল?
রোমেন গাই

এটি এর পরিবর্তে ব্যাকগ্রাউন্ড হিসাবে আমার অঙ্কনীয় উত্স থেকে রঙ নয় তবে একটি চিত্র দেখাচ্ছে।
ডিজিটাল ব্রিড

2
উপরেরগুলিতে কাজ করা উচিত, যদি আপনি অ্যান্ড্রয়েড ব্যবহার করেন: অঙ্কনীয়, অ্যান্ড্রয়েড নয়: রঙ - অন্তত সেক্ষেত্রে এটি আমার জন্য কাজ করে: অ্যান্ড্রয়েড: অঙ্কনযোগ্য = "@ রঙ / আমার_কাস্টম_ রঙ" " আমার রঙগুলি মান / color.xML- এ সংজ্ঞায়িত করা হয়েছে
এজেন্টকনপফ

উত্তর:


226

এখানে সমস্যাটি হ'ল আপনি কোনও রঙ নির্বাচক ব্যবহার করে পটভূমির রঙটি সংজ্ঞায়িত করতে পারবেন না, আপনার একটি অঙ্কনীয় নির্বাচক দরকার or সুতরাং, প্রয়োজনীয় পরিবর্তনগুলি দেখতে এই রকম হবে:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/selected_state" />
</selector>

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

তারপরে আপনাকে এই res/drawable/selected_state.xmlফাইলটি তৈরি করতে হবে:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="@color/semitransparent_white" />
</shape>

এবং অবশেষে, আপনি এটি এর মতো ব্যবহার করবেন:

android:background="@drawable/selector"

দ্রষ্টব্য : ওপি কোনও চিত্র সংস্থান আঁকানোর কারণ হ'ল সম্ভবত তিনি তার উত্সটি কেবল রঙ ডিরেক্টরিতে রেফারেন্স করার চেষ্টা করেছিলেন তবে এটি ব্যবহার করে @drawableতিনি ভুল সংস্থান নির্বাচন করে একটি আইডি সংঘর্ষের সাথে শেষ করেছিলেন।

আশা করি এটি এখনও কাউকে সহায়তা করতে পারে এমনকি যদি ওপি সম্ভবত তখনই তার সমস্যার সমাধান করে।


1
ধন্যবাদ, বেনোইট সমস্যাটি সমাধান করা হয়েছিল (আমাকে অবশ্যই স্বীকার করতে হবে, শেষ পর্যন্ত আমি এটি কীভাবে করেছি তা আমি মনে করতে পারি না) এবং প্রকল্পটি সফলভাবে শেষ হয়েছিল। আমি আপনাকে কৃতজ্ঞ যে আপনি এখানে পোস্ট করতে এসেছিলেন এবং ভবিষ্যতে একই সমস্যা হানা লোকদের সাহায্য করতে, মহান চেতনা!
ডিজিটাল ব্রিড

আমি এই কাজ করতে পারি না। আমি এটিকে একটি বোতামে প্রয়োগ করার চেষ্টা করছি এবং এটি নির্বাচকটির ডিফল্ট রঙে ব্যাকগ্রাউন্ড সেট করে, তবে এটি state_pressed এ সংজ্ঞায়িত আকারে পরিবর্তন হয় না। আমি কী মিস করছি? আপনি যদি আমাকে সঠিক দিকে নির্দেশ করতে পারেন তবেই আমি একটি নতুন প্রশ্ন খুলতে পারি।
ম্যারাগিউস

@ মারাগসগুলি কোনও কোড না দেখে বলা শক্ত। আমি আপনাকে একটি নতুন প্রশ্ন খোলার এবং প্রাসঙ্গিক কোড পোস্ট করার পরামর্শ দিচ্ছি যাতে আমরা কী ভুল হতে পারে তা নির্ধারণ করতে পারি। আপনার নতুন পোস্টের লিঙ্ক সহ আপনি এই পোস্টে একটি মন্তব্য যুক্ত করতে পারেন।
বেনোইট মার্টিন

9
পরিবর্তে আপনার নির্বাচক আইটেমগুলিতে কেবল "অঙ্কনযোগ্য =" @ রঙ / আপনার_ রঙ "ব্যবহার করবেন না কেন? আপনাকে কোনও আকার বা অন্য কোনও ফাইল সংজ্ঞায়িত করতে হবে না, কেবল মান / রং.এক্সএমএলতে আপনার বর্ণ সংজ্ঞা আছে (এটি সর্বদা ভাল হার্ডকোড রং না)।
javaxian

কাজ করছে না. এটি আমাকে xML এর আকারে ঘোষিত উভয়ের চেয়ে আলাদা রঙ দেখাচ্ছে।
এরর রোহিত শর্মা

121

বেনোইটের সমাধানটি কাজ করে, তবে কোনও আকৃতি আঁকার জন্য আপনাকে সত্যিই ওভারহেড ব্যয় করতে হবে না। যেহেতু রঙগুলি অঙ্কনযোগ্য হতে পারে, তাই কেবল একটি রঙকে একটি /res/values/colors.xML ফাইলে সংজ্ঞায়িত করুন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="semitransparent_white">#77ffffff</color>
</resources>

এবং তারপরে আপনার নির্বাচক হিসাবে যেমন ব্যবহার করুন:

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

কোনও কারণে, আপনার সমাধানটি আমার অঙ্কনীয় সংস্থান ফোল্ডার থেকে রঙটি নয় তবে এলোমেলো চিত্র দেখাচ্ছে। আমি প্রকল্পটি / ফিক্স প্রপার্টি / পুনর্নির্মাণ / পুনরায় খোলা করার চেষ্টা করেছি যা সত্যই অদ্ভুত বলে মনে হচ্ছে, তবে কোনও ফল হয় নি। রহস্যময়।
ইয়াহেল

@ ইয়াহেল আপনি সম্ভবত রঙিন অঙ্কনযোগ্য সংস্থানটিকে প্রকৃত অঙ্কনীয় ফাইলের মতোই নামকরণ করেছেন?
জোনা

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

@ ইয়াহেল মিমি ... ভাল আমি এই সমস্যাটি দেখছি তবে আমার ক্ষেত্রে একই ফাইলের নাম নয় ... আমার প্রশ্নগুলি এখানে চেকআউট করুন stackoverflow.com/questions/9004744/…
জোনা

এটি কাজ করতে পরিচালিত করেনি, বেনোইট মার্টিনের উত্তরটি ভাল কাজ করেছে।
এমমানুয়েল টাজারি

83

উপরের একটি এমনকি সহজ সমাধান:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <color android:color="@color/semitransparent_white" />
    </item>
    <item>
        <color android:color="@color/transparent" />
    </item>
</selector>

এটি অঙ্কনযোগ্য ফোল্ডারে সংরক্ষণ করুন এবং আপনি যেতে ভাল।


1
হতে পারে এটি কাজ করে তবে আনুষ্ঠানিকভাবে সমর্থিত নয় (অ্যান্ড্রয়েড স্টুডিও এটিকে ত্রুটি হিসাবে গণ্য করে)।
ব্ল্যাকহেক্স

@ ব্ল্যাকেক্স অদ্ভুত Eclipse এ আমার জন্য ভাল কাজ করে। এটি সম্ভবত একটি লিন্ট ত্রুটি এবং এটি যদি হয় তবে আপনার এটি অক্ষম করতে বা উপেক্ষা করতে সক্ষম হওয়া উচিত।
জেসন রবিনসন

6
এটিই আমি সমাধানটি বিবেচনা করব।
গঞ্জালেজ

<item android:state_pressed="true" android:color="@color/vantablack"/><item android:state_pressed="true"><color android:color="@color/vantablack"/></item>
সামার্থিকভাবে অদৃশ্যভাবে

16

এমনকি এটি কাজ করে।

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/dim_orange_btn_pressed" />
    <item android:state_focused="true" android:drawable="@color/dim_orange_btn_pressed" />
    <item android:drawable="@android:color/white" />
</selector>

আমি android:drawableপ্রতিটি আইটেমের বৈশিষ্ট্য যুক্ত করেছি এবং তাদের মানগুলি রঙ।

যাইহোক, তারা কেন বলে যে colorএটির অন্যতম বৈশিষ্ট্য selector? তারা যে android:drawableপ্রয়োজন হয় তা লিখেন না ।

রঙের রাজ্যের তালিকা সংস্থান

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

আপনি যখন টেক্সটভিউ রঙগুলিতে সেট করছেন তবে ব্যাকগ্রাউন্ডের সাথে না রেখে রঙ বৈশিষ্ট্যটি কাজ করে কারণ ব্যাকগ্রাউন্ডের রংগুলি কালারড্রেবল হিসাবে অভিনয় করা হয়
আখিল বাবা

সর্বোপরি কার্যকর করার সর্বোত্তম এবং সহজ সমাধান।
4gus71n

6

কে ব্যাকগ্রাউন্ড সেক্টর তৈরি না করে এটি করতে সন্ধান করছে, কেবল সেই লাইনগুলিতে যুক্ত করুন TextView

android:background="?android:attr/selectableItemBackground"
android:clickable="true"

এটিকে বাছাইযোগ্য ব্যবহার করতে:

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