android - অ্যান্ড্রয়েড কি: অ্যান্ড্রয়েডে ওজনসাম, এবং এটি কিভাবে কাজ করে?




android-layout android-layout-weight (6)

আমি জানতে চাই: অ্যান্ড্রয়েড কী: ওজনসাম এবং লেআউট ওজন, এবং কিভাবে তারা কাজ করে?


SuperM এর এবং জেফ এর উত্তর যোগ করা,

যদি লিনিয়ার এলয়েউটে ২ টি দর্শন থাকে তবে প্রথমটির লেআউট_ওয়েতে 1, দ্বিতীয়টির লেআউট_ওয়েট এবং দ্বিতীয় কোনও ওজনসাম নির্দিষ্ট নেই, ডিফল্টভাবে, ওজনসামকে 3 (শিশুদের ওজনের সমষ্টি) হিসাবে গণনা করা হয় এবং প্রথম দৃশ্যটি 1/3 টি স্থান নেয় এবং দ্বিতীয়টি ২/3 লাগে।

যাইহোক, যদি আমরা ওজনসামকে 5 হিসাবে নির্দিষ্ট করতে থাকি, প্রথম স্থানটি 1/5 তম স্থান গ্রহণ করবে এবং দ্বিতীয়টি ২ / 5 তম হবে। সুতরাং স্থানটি মোট 3/5 তম স্থান খালি রেখে খালি রাখা হবে।


এক জিনিস যা অন্য কেউ বলে না বলে মনে হচ্ছে: ধরুন আপনার একটি উল্লম্ব LinearLayout , সুতরাং লেআউট / উপাদান / তার ভিতরে ভিউয়ের জন্য 100% সঠিকভাবে কাজ করার জন্য - তাদের সকলের অবশ্যই layout_height সম্পত্তি থাকতে হবে (যা অবশ্যই উপস্থিত থাকতে হবে আপনার এক্সএমএল ফাইল) 0dp সেট। কিছু ক্ষেত্রে মতামত অন্য কিছু মত মনে হয়।


কিছু পরীক্ষা করার পরে, আমি মনে করি লিনিয়ার এলয়েটের জন্য অ্যালগরিদমটি হল:

অনুমান করুন যে weightSum একটি মান সেট করা হয়। অনুপস্থিতির ক্ষেত্রে পরে আলোচনা করা হয়।

প্রথমে, match_parent fill_parent মাত্রায় match_parent বা fill_parent অনুসারে উপাদানগুলির সংখ্যা অনুসারে weightSum ভাগ করুন (উদাহরণস্বরূপ, orientation="horizontal" জন্য layout_width )। আমরা এই মান ওজন গুণক কল হবে প্রতিটি উপাদান জন্য। weightSum জন্য ডিফল্ট মান হল 1.0, তাই ডিফল্ট ওজন গুণক 1/n , যেখানে n হল fill_parent উপাদানগুলির সংখ্যা; wrap_content উপাদান n অবদান না।

যখন weightSum 60 হয়, এবং 3 টি fill_parent উপাদানগুলি হয়, ওজন গুণক ২0। ওজন layout_width যদি বৈশিষ্ট্য অনুপস্থিত থাকে তবে layout_width জন্য ডিফল্ট মান।

দ্বিতীয়ত, প্রতিটি উপাদান সর্বাধিক সম্ভাব্য বিস্তার গণনা করা হয়। প্রথমত, wrap_content উপাদানগুলি তাদের সামগ্রী অনুযায়ী গণনা করা হয়। তাদের সম্প্রসারণ পিতামাতার ধারক সম্প্রসারণ থেকে কাটা হয়। আমরা বেয়ার expansion_remainer remainer কল হবে। এই অবশিষ্টটি তাদের layout_weight অনুযায়ী fill_parent উপাদানের মধ্যে বিতরণ করা হয়।

তৃতীয়ত, প্রতি fill_parent উপাদান সম্প্রসারণ হিসাবে গণনা করা হয়:

উদাহরণ:

যদি weightSum 60 হয়, এবং 3 টি fill_parent উপাদানগুলি সহ 10, 20 এবং 30 টি হয় তবে স্ক্রিনে তাদের সম্প্রসারণ ২/3, 1/3 এবং 0/3 প্যারেন্ট কন্টেইনারের।

weight | expansion
     0 | 3/3
    10 | 2/3
    20 | 1/3
    30 | 0/3
    40 | 0/3

সর্বনিম্ন সম্প্রসারণ 0 এ ক্যাপ করা হয়। সর্বাধিক সম্প্রসারণ পিতামাতার আকারে আবদ্ধ করা হয়, অর্থাৎ ওজনগুলি 0 এ ক্যাপ করা হয়।

যদি কোন উপাদান wrap_content এ সেট করা থাকে, তবে তার সম্প্রসারণটি প্রথম গণনা করা হয় এবং অবশিষ্ট বিস্তারটি fill_parent উপাদানের মধ্যে বিতরণের সাপেক্ষে। যদি weightSum সেট করা থাকে, layout_weight এটি layout_weight উপাদানের কোনও প্রভাব নেই এমন layout_weight বাড়ে। যাইহোক, wrap_content উপাদানগুলিকে দৃশ্যমান এলাকার বাইরেও ঠেলে দেওয়া যেতে পারে যার উপাদান ওজন কম (উদাহরণস্বরূপ উপরের উদাহরণের জন্য weightSum = 1 বা weightSum মধ্যে 0-1 এর মধ্যে)।

যদি কোন weightSum নির্দিষ্ট না হয়, তবে এটি layout_weight সেট সহ উপাদান সহ সমস্ত layout_weight মানগুলির সমষ্টি হিসাবে গণনা করা হয়! তাই layout_weight উপাদানের উপর layout_weight সেট থাকা, তাদের সম্প্রসারণকে প্রভাবিত করতে পারে । যেমন একটি নেতিবাচক ওজন অন্যান্য fill_parent উপাদান সঙ্কুচিত হবে। fill_parent উপাদানগুলি নির্ধারিত হওয়ার আগে, উপরে উল্লিখিত সূত্রটি fill_parent উপাদানগুলিতে প্রয়োগ করা হবে, সর্বাধিক সম্ভাব্য বিস্তারটি আবৃত সামগ্রী অনুযায়ী তাদের সম্প্রসারণ হতে পারে। fill_parent উপাদান সংকুচিত হবে, এবং তারপরে অবশিষ্ট fill_parent উপাদানের জন্য সর্বাধিক সম্ভাব্য বিস্তার গণনা করা এবং বিতরণ করা হয়।

এই অপ্রচলিত ফলাফল হতে পারে।


বিকাশকারী documentation থেকে

উদাহরণস্বরূপ এটি একটি একক সন্তানকে মোট উপলব্ধ স্থানটির 50% প্রদান করে এটি একটি লেআউট_ওয়েট 0.5 এবং ওজনসাম 1.0 থেকে সেট করে।

@ শুভাইউ উত্তর যোগ করুন

বিশ্রাম 3/5 অন্যান্য শিশু লেআউটগুলির জন্য ব্যবহার করা যেতে পারে যা সত্যিই লেআউট ধারণকারী কোন নির্দিষ্ট অংশ প্রয়োজন হয় না।

এই android:weightSum সম্ভাব্য ব্যবহার android:weightSum সম্পত্তি।


documentation এটি ভাল বলে এবং একটি উদাহরণ রয়েছে, (খনি হাইলাইট)।

অ্যান্ড্রয়েড weightSum

সর্বাধিক ওজন যোগ নির্ধারণ করে। যদি নির্দিষ্ট না করা হয়, তবে সমস্ত সন্তানদের layout_weight যোগ করে সংখ্যার গণনা করা হয়। উদাহরণস্বরূপ এটি একটি একক সন্তানকে মোট উপলব্ধ স্থানটির 50% প্রদান করে এটি একটি লেআউট_ওয়েট 0.5 এবং ওজনসাম 1.0 থেকে সেট করে।

সুতরাং সুপারএম এর উদাহরণটি সংশোধন করার জন্য অনুমান করুন যে আপনার কাছে অনুভূমিক অভিযোজন সহ লিনিয়ারআউটআউট রয়েছে যার মধ্যে দুটি চিত্র ImageViews এবং একটি টেক্সট ভিউ রয়েছে। আপনি একটি নির্দিষ্ট আকারের জন্য TextView সংজ্ঞায়িত করুন এবং আপনি দুটি চিত্র ImageViews সমানভাবে অবশিষ্ট স্থানটি নিতে চাইবেন।

এটি সম্পাদন করতে, আপনি প্রতিটি layout_weight 1 প্রয়োগ করবেন, layout_weight কেউ নেই এবং weightSum 2.0 weightSum


লেআউট ওজন একটি অনুপাত মত কাজ করে। উদাহরণস্বরূপ, যদি একটি উল্লম্ব লেআউট থাকে এবং দুটি আইটেম (যেমন বোতাম বা পাঠ্য দর্শন) থাকে, একটি লেআউট ওজন ২ এবং অন্যটি লেআউট ওজন 3 যথাক্রমে থাকে। তারপর প্রথম আইটেম স্ক্রিন / লেআউটের 5 টি অংশে 2 টি এবং 5 টির মধ্যে 3 টি অংশ দখল করবে। এখানে 5 ওজন যোগফল। অর্থাৎ ওজন সমষ্টি সংজ্ঞায়িত অংশে সমগ্র বিন্যাস বিভক্ত করে। এবং লেআউট ওজন নির্ধারণ করে যে কোনও নির্দিষ্ট অংশটি মোট ওজন সমষ্টি প্রাক-সংজ্ঞায়িত করে থাকে। ওজন যোগ হিসাবে ম্যানুয়ালি হিসাবে ঘোষিত হতে পারে। ইউটিউব ডিজাইনের জন্য রৈখিক লেআউট ব্যবহার করার সময় বাটন, টেক্সটউইউ, সম্পাদক ইত্যাদি সমস্ত ওজন এবং লেআউট ওজন ব্যবহার করে সংগঠিত হয়।







android-layout-weight