অ্যান্ড্রয়েড স্প্যানড, স্প্যানডস্ট্রিং, স্প্যানিয়েবল, স্প্যানিয়েবল স্ট্রিং এবং চারসেকেন্স ence


96

অ্যান্ড্রয়েড অফার ইন্টারফেসগুলি বিভিন্ন সব টেক্সট এবং স্ট্রিং এর সাথে সম্পর্কিত: Spanned, SpannedString, Spannable, SpannableStringএবং CharSequence

উপরের সমস্তটি আমি বিভিন্ন দৃশ্যে সাধারণতHtml.fromHtml() কিছুতে TextViewস্টাইলিং প্রয়োগ করার জন্য লিঙ্কযোগ্য পাঠ্য ব্যবহার করার পরে ব্যবহার করেছি।

আমি অ্যান্ড্রয়েডের অফিসিয়াল ডকুমেন্টেশন থেকে এই ইন্টারফেসগুলির উদ্দেশ্য / ব্যবহার বুঝতে চেষ্টা করেছি এবং এটি বেশ বিভ্রান্তিকর হিসাবে ব্যর্থ হয়েছে .. এই ইন্টারফেসগুলির উদ্দেশ্য কী? কোন পরিস্থিতিতে এগুলি ব্যবহার করা বেশিরভাগ ক্ষেত্রে সাধারণ? কোন ক্ষেত্রে এগুলি ব্যবহার করা এড়ানো ভাল? এর মধ্যে যে কোনও একটি ব্যবহার করার সময় কি স্পষ্ট পারফরম্যান্স প্রভাব বিবেচনা করা যেতে পারে?

যদি কেউ শালীন ব্যাখ্যা সরবরাহ করতে পারে তবে এটির প্রশংসা হবে।

উত্তর:


149

এই ইন্টারফেসের উদ্দেশ্য কী?

yuml.me/edit/5f8da6cb থেকে ডায়াগ্রাম CharSequenceঅক্ষরের ক্রমিক প্রতিনিধিত্বকারী একটি স্ট্যান্ডার্ড জাভা ইন্টারফেস। Stringএর সর্বাধিক ব্যবহৃত কংক্রিট বাস্তবায়ন CharSequence, এর পরে StringBuilder

SpannedCharSequenceপাঠ্যের অংশগুলিতে প্রয়োগ করতে ফর্ম্যাটিং নির্দেশ করে এমন একটি "স্প্যানস" রয়েছে যেখানে এই স্প্যানগুলি সংশোধন করা যায় না।

Spannableএটি একটি Spanned, স্প্যানগুলি সংশোধন করার ক্ষমতা যুক্ত করছে (বিন্যাস যোগ করতে বা অপসারণ করতে), তবে পাঠ্যটি নিজেই পরিবর্তন করতে হবে না

SpannedStringSpannedইন্টারফেসের একটি কংক্রিট বাস্তবায়ন ।

SpannableStringSpannableইন্টারফেসের একটি কংক্রিট বাস্তবায়ন ।

কোন পরিস্থিতিতে এগুলি ব্যবহার করা বেশিরভাগ ক্ষেত্রে সাধারণ?

যখন এমন কোনও পদ্ধতি থাকে যা একটি ফেরত দেয় (উদাহরণস্বরূপ, getText()একটি তে)EditText ) বা যখন এমন কোনও পদ্ধতি রয়েছে যা তাকে প্যারামিটার হিসাবে গ্রহণ করে (যেমন, setText()TextView)। yuml.me/edit/35c8f39f থেকে ডায়াগ্রাম

আপনার ব্যবহারের উল্লেখ করা কেস Html.fromHtml()প্রচলিত অ্যান্ড্রয়েড বিকাশে সম্ভবত সবচেয়ে সাধারণ, এ হিসাবে TextViewএকটিSpanned ওজনের তুলনায় অনেক হালকা WebView। তবে অন্যান্য ব্যবহারের ক্ষেত্রে যেমন রয়েছে:

কোন ক্ষেত্রে এগুলি ব্যবহার করা এড়ানো ভাল?

তারা টাক পড়ে, তুষার অপসারণ, হিটার পাম্প মেরামত, একটি স্যুফ্লাই ইত্যাদি তৈরির বিরুদ্ধে লড়াইয়ে একাকী ভয়ঙ্কর are

:-)

এর মধ্যে যে কোনও একটি ব্যবহার করার সময় কোনও স্পষ্ট পারফরম্যান্স প্রভাব বিবেচনা করা উচিত?

সংজ্ঞা অনুসারে ইন্টারফেসগুলিতে "পারফরম্যান্স প্রভাব" থাকে না - এগুলি কেবল একটি API এর বিবরণ।

আমি জানি না যে কোনও নির্দিষ্ট অপারেশনের SpannableStringতুলনায় উল্লেখযোগ্যভাবে ধীর SpannedString। যাইহোক, SpannableStringBuilder(যা সেই পাঠ্যটিকে ফর্ম্যাট করে এমন স্প্যানগুলি ছাড়াও পাঠ্যটিতে ম্যানিপুলেট করার অনুমতি দেয়) বিভিন্ন কিছুর চেয়ে SpannableStringবা কিছুটা ধীর হতে SpannedStringপারে। পারফরম্যান্সের পার্থক্যগুলি যথেষ্ট কিনা তা ব্যবহারের উপর নির্ভর করবে।


4
যেহেতু অফিসিয়াল ডক্স নীরব, আপনি কীভাবে এই তথ্যগুলি পেয়েছেন? ম্যানুয়াল উত্সটি শক্তভাবে ব্রাউজ করছে?
পেসারিয়ার

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

@ কমন্সওয়্যার, এর অর্থ এই যে এর মধ্যে স্মাইলিগুলির সাথে একটি স্ট্রিং spannableStringএকটি সাধারণ হিসাবে বিবেচিত হবে না .. কারণ আমি setText(my_string) যখন my_stringসাধারণ স্ট্রিংয়ের তুলনায় এতে স্মাইলি রাখি (ওয়াটসঅ্যাপের মতো) তখন আমি অনেক পিছিয়ে পড়েছি। । (যার কেবল সরল পাঠ্য রয়েছে) দয়া করে কিছুটা হালকা নিক্ষেপ করুন ... একরকম আমি বিশ্বাস করি যে স্মাইলি কেবল পাঠ্য (ইউনিকোড) ছাড়া কিছুই নয়
eRaisedToX

4
@ ই রাইজডটক্স: স্মাইলি ইমোজি বা চিত্র হিসাবে প্রয়োগ করা যেতে পারে। আফাইক, ইমোজি হ'ল স্বতন্ত্র ইউনিকোড অক্ষর এবং সম্ভবত একটি নিয়মিত স্ট্রিং হতে পারে। চিত্রগুলি প্রয়োজন ImageSpanযা ঘুরে ফিরে প্রয়োজন SpannableString
কমন্সওয়্যার

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

45

স্ট্রিং

Stringপরিবর্তনযোগ্য (যেমন, পাঠ্য পরিবর্তন করতে পারে না)। এটির সাথে এর কোনও স্প্যান যুক্ত নেই। (স্প্যানগুলি পাঠ্যের উপরের পরিসীমাগুলির মধ্যে রঙ, হাইলাইটিং, ইটালিকস, লিঙ্কগুলি ইত্যাদির স্টাইলিং তথ্য অন্তর্ভুক্ত করে থাকে) তাই আপনি Stringযখন এমন পাঠ্য পরিবর্তন করার প্রয়োজন হয় না এবং কোনও স্টাইলিংয়ের প্রয়োজন হয় না তখন আপনি এটি ব্যবহার করতে পারেন ।

স্ট্রিংবিল্ডার

একজন StringBuilderযাতে আপনি এটি একটি নতুন বস্তু তৈরি ছাড়া পরিবর্তন করতে পারেন, চপল টেক্সট হয়েছে। তবে এর কোনও স্প্যান তথ্য নেই। এটি কেবল সাধারণ পাঠ্য। সুতরাং StringBuilderযখন আপনার পাঠ্যটি পরিবর্তন করা দরকার তখন একটি ব্যবহার করুন তবে আপনি এটি স্টাইলিংয়ের বিষয়ে চিন্তা করেন না।

স্প্যানড স্ট্রিং

SpannedString (ক মত অপরিবর্তনীয় রচনা রয়েছে String) এবং অপরিবর্তনীয় বিঘত তথ্য। এটি Spannedইন্টারফেস দ্বারা সংজ্ঞায়িত প্রয়োজনীয়তার একটি কংক্রিট বাস্তবায়ন । SpannedStringআপনার পাঠ্যের শৈলীকালে একটি ব্যবহার করুন তবে আপনি পাঠ্য বা শৈলী তৈরির পরে কোনও পরিবর্তন করার প্রয়োজন নেই।

দ্রষ্টব্য: তেমন কোনও জিনিস নেই SpannedStringBuilderকারণ যদি পাঠ্য পরিবর্তন হয় তবে স্প্যানের তথ্যও খুব সম্ভবত পরিবর্তিত হতে পারে।

স্প্যানিয়েবল স্ট্রিং

এ- SpannableStringএর অবিচ্ছেদ্য পাঠ্য রয়েছে তবে এর স্প্যান তথ্য পরিবর্তনযোগ্য। এটি দ্বারা নির্ধারিত প্রয়োজনীয়তার একটি কংক্রিট বাস্তবায়নSpannable ইন্টারফেস । একটি ব্যবহার করুন SpannableStringযখন আপনার পাঠ্য পরিবর্তন করা প্রয়োজন না, কিন্তু স্টাইলিং আছে।

স্প্যানিয়েবল স্ট্রিংবিল্ডার

একটি SpannableStringBuilderউভয় চপল টেক্সট এবং বিঘত তথ্য রয়েছে। এটা তোলে প্রয়োজনীয়তা দ্বারা সংজ্ঞায়িত একটি কংক্রিট বাস্তবায়ন Spannableএবং Editableইন্টারফেস (অন্যদের মধ্যে)। ব্যবহার করাSpannableStringBuilder যখন পাঠ্য এবং এর শৈলীটি আপডেট করতে হবে তখন ।

CharSequence

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


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