কিভাবে বেসলাইন সেটিংস লিনিয়ারলআউটে পারফরম্যান্সের উন্নতির জন্য মিথ্যাতে সংযুক্ত থাকে?


218

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

এই সতর্কতাটি যুক্ত করে এমন লিন্টের দস্তাবেজগুলি বলছে

লেআউট পারফরম্যান্স: আপনার অ্যান্ড্রয়েড সেট করা উচিত যেখানে ওজনের সাথে লিনিয়ারলআউটগুলি সন্ধান করে: বেসলাইনএলাইনড = "মিথ্যা" আরও ভাল পারফরম্যান্সের জন্য, এবং এমন ক্ষেত্রেও খুঁজে পাওয়া যায় যেখানে আপনি নেস্টেড ওজন রেখেছেন যা পারফরম্যান্স সমস্যার কারণ হতে পারে।

কেউ কী ব্যাখ্যা করতে পারেন কেন এটি কার্যকারিতা উন্নত করে, বিশেষত যখন ওজন জড়িত থাকে?

উত্তর:


165

সেটিংস স্থাপন করে android:baselineAligned="false"আপনি বাচ্চাদের বেসলাইনগুলি সারিবদ্ধ করার জন্য আপনার অ্যাপ্লিকেশনটির লেআউটটি অতিরিক্ত কাজটি আটকাচ্ছেন; যা স্পষ্টতই কর্মক্ষমতা বাড়াতে পারে। (ইউআই তে কম অপ্রয়োজনীয় অপারেশন => আরও ভাল পারফরম্যান্স)


20
অংশটি সুস্পষ্ট। আমি যা পেতে চেষ্টা করছিলাম তা হল ওজন জড়িত থাকাকালীন কেন এটি কেবল পারফরম্যান্সের উন্নতি হবে?
ক্রিস্টোফার পেরি

185
বেসলাইন কী?
ম্যাট

48
বেসলাইন শব্দটি টাইপোগ্রাফি থেকে এসেছে। এটি পাঠ্যের অদৃশ্য লাইনের অক্ষরগুলি বসা। en.wikipedia.org/wiki/Baseline_%28typography%29
জ্লট Safrany

12
সুতরাং যদি এটি একটি পারফরম্যান্স উন্নতি হয়, তার মানে সাধারণত যে কাজটি করা হয় তা আর করা হচ্ছে না। এর পার্শ্ব-প্রতিক্রিয়াগুলি কী কী? আমরা এখন যে কাজটি এড়িয়ে চলেছি তাতে কি আলাদা ফলাফল পাওয়ার ক্ষমতা রয়েছে?
লুুনাথ

30
ডকুমেন্টেশন অনুসারে @ lhunath, ডিফল্টটি সত্য হিসাবে সেট করা আছে । এটি যেকোনও ইউআই পাঠ্যের বেসলাইনটিকে অন্যের সাথে সামঞ্জস্য করতে বাধ্য করে। উদাহরণস্বরূপ বোতামগুলি সম্পর্কে চিন্তা করুন, আপনার একই লাইনে একই প্রস্থ / উচ্চতা সহ দুটি বোতাম রয়েছে তবে তাদের একটিতে লম্বা পাঠ্য রয়েছে, কারণ baselineAlined="true"লম্বা পাঠ্যযুক্ত বোতামটি অন্য বোতামগুলির সাহায্যে এটি পাঠ্য সারিবদ্ধ করতে প্রায় ঘুরে আসতে পারে। আরও ভাল উদাহরণের জন্য, এই পোস্টটি দেখুন
নিমা জি

20

কিভাবে android:baselineAligned="false" সাহায্য। এটি উত্তর নাও হতে পারে তবে ধারণা পেতে সহায়তা করে।

আমি খালি আনুভূমিক লিনিয়ারলয়েটে উল্লম্বভাবে কেন্দ্র করে 3 টি আইটেম (আইকন, পাঠ্য, বোতাম) পেতে সক্ষম হয়েছি।

এটি সহজ বলে মনে হতে পারে তবে বাস্তবে অ্যান্ড্রয়েড উল্লেখ করে: মাধ্যাকর্ষণ = "সেন্টার_ভার্টিকাল" হিসাবে লিনিয়ারলআউট বৈশিষ্ট্যটি যথেষ্ট নয় - আইকনটি কেন্দ্রিক, তবে পাঠ্য এবং বোতামটি নয়। এটি কারণ (সম্ভবত) পাঠ্যের একটি বেসলাইন থাকে এবং কেন্দ্রীকরণ অ্যালগরিদম এটি 'আসল' উল্লম্ব কেন্দ্রের পরিবর্তে ব্যবহার করে। তবে কী খারাপ - বোতামটি (যা পাঠ্যের পাশে আসে) পাঠ্যের বেসলাইনটি ব্যবহার করে কেন্দ্রীভূত হয়!

অ্যান্ড্রয়েড নির্দিষ্ট করে: লিনিয়ারলআউটে বেসলাইনএলাইনড = "মিথ্যা" এটি বন্ধ করে দেয় এবং সবকিছুই সঠিকভাবে কেন্দ্র করে।


15
// Baseline alignment requires to measure widgets to obtain the
                // baseline offset (in particular for TextViews). The following
                // defeats the optimization mentioned above. Allow the child to
                // use as much space as it wants because we can shrink things
                // later (and re-measure).
                if (baselineAligned) {
                    final int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
                    child.measure(freeSpec, freeSpec);
                }

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/LinearLayout.java#L1093

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