উত্তর:
সঙ্গে layout_weight
আপনি একাধিক দৃশ্যের মধ্যে একটি আকার অনুপাত নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ আপনার একটি রয়েছে MapView
এবং table
যা মানচিত্রে কিছু অতিরিক্ত তথ্য প্রদর্শন করবে। মানচিত্রে স্ক্রিনের 3/4 ব্যবহার করা উচিত এবং টেবিলটি স্ক্রিনের 1/4 ব্যবহার করা উচিত। তারপর আপনি সেট হবে layout_weight
এর map
থেকে 3 এবং layout_weight
এর table
1।
এটি কাজ করতে আপনাকে উচ্চতা বা প্রস্থ (আপনার অভিযোজনের উপর নির্ভর করে) 0px তেও সেট করতে হবে।
সংক্ষেপে, layout_weight
ভিউতে বরাদ্দকৃত বিন্যাসের অতিরিক্ত স্থানের পরিমাণ নির্দিষ্ট করে।
লিনিয়ারলআউট পৃথক বাচ্চাদের ওজন নির্ধারণকে সমর্থন করে। এই বৈশিষ্ট্যটি একটি দর্শনকে একটি "গুরুত্ব" মান দেয় এবং এটি প্যারেন্ট ভিউতে থাকা কোনও অবশিষ্ট স্থান পূরণ করতে প্রসারিত করতে দেয়। দর্শনের ডিফল্ট ওজন শূন্য।
সাধারণভাবে, সূত্রটি হ'ল:
সন্তানের জন্য স্থান স্থান = (সন্তানের পৃথক ওজন) / (লিনিয়ার লেআউটে প্রতিটি শিশুর ওজনের যোগফল)
যদি সেখানে তিনটি পাঠ্য বাক্স থাকে এবং এর মধ্যে দু'টি 1 টি ওজন ঘোষণা করে, তৃতীয়টি কোনও ওজন (0) না দেওয়া থাকে, তবে অবশিষ্ট স্থানটি নীচে নির্ধারিত হয়:
1 ম পাঠ্য বাক্স = 1 / (1 + 1 + 0)
২ য় পাঠ্য বাক্স = 1 / (1 + 1 + 0)
তৃতীয় পাঠ্য বাক্স = 0 / (1 + 1 + 0)
ধরা যাক আমাদের একটি অনুভূমিক সারিতে একটি পাঠ্য লেবেল এবং দুটি পাঠ্য সম্পাদনা উপাদান রয়েছে। লেবেলের কোনও layout_weight
নির্দিষ্ট নেই, তাই এটি রেন্ডার করতে প্রয়োজনীয় ন্যূনতম স্থান গ্রহণ করে। যদিlayout_weight
দুটি পাঠ্য সম্পাদনা উপাদানের প্রতিটি 1 তে সেট করা থাকে তবে প্যারেন্ট লেআউটে অবশিষ্ট প্রস্থটি তাদের মধ্যে সমানভাবে বিভক্ত হবে (কারণ আমরা দাবি করি যে তারা সমান গুরুত্বপূর্ণ)।
হিসাব:
1 ম লেবেল = 0 / (0 + 1 + 1)
২ য় পাঠ্য বাক্স = 1 / (0 + 1 + 1)
তৃতীয় পাঠ্য বাক্স = 1 / (0 + 1 + 1)
পরিবর্তে, যদি প্রথম এক পাঠ্য বাক্সটিতে layout_weight
1 এর 1 থাকে এবং দ্বিতীয় পাঠ্য বাক্সটিতে layout_weight
2 এর 2 থাকে, তবে অবশিষ্ট স্থানের এক তৃতীয়াংশ প্রথমটিকে এবং দ্বিতীয় অংশটিকে দুটি তৃতীয়াংশ দেওয়া হবে (কারণ আমরা দ্বিতীয়টি দাবি করি একটি আরও গুরুত্বপূর্ণ)।
হিসাব:
1 ম লেবেল = 0 / (0 + 1 + 2)
২ য় পাঠ্য বাক্স = 1 / (0 + 1 + 2)
তৃতীয় পাঠ্য বাক্স = 2 / (0 + 1 + 2)
android:layout_width="0px"
যেমন গুরুত্বপূর্ণ। এছাড়াও, ওজনের পূর্ণসংখ্যার প্রয়োজন হয় না।
weightSum
ছবিতে আসে? এর সাথে কি কিছু করার আছে layout_weight
?
অন্যান্য উত্তরগুলিতে যুক্ত করে, এটি কাজ করার জন্য সর্বাধিক গুরুত্বপূর্ণ জিনিসটি লেআউটের প্রস্থ (বা উচ্চতা) 0 পিক্সারে সেট করা
android:layout_width="0px"
অন্যথায় আপনি আবর্জনা দেখতে পাবেন
একটি spanning একাধিক মতামত থাকে তাহলে LinearLayout
, তারপর layout_weight
তাদের প্রতিটি একটি আনুপাতিক আকার দেয়। আরও বড় layout_weight
মান সহ একটি দৃশ্য আরও "ওজন" করে, তাই এটি একটি বৃহত্তর স্থান পায়।
জিনিসগুলি আরও পরিষ্কার করার জন্য এখানে একটি চিত্র is
শব্দ বিন্যাসের ওজন গণিতের ওজনযুক্ত গড়ের ধারণার সাথে সম্পর্কিত । এটি এমন একটি কলেজ শ্রেণীর মতো যেখানে হোমওয়ার্কের মূল্য 30%, উপস্থিতি 10%, মিডটার্মের মূল্য 20%, এবং ফাইনালটির মূল্য 40%। এই অংশগুলির জন্য আপনার স্কোরগুলি যখন একসাথে ওজন করা হয় তখন আপনাকে আপনার মোট গ্রেড দেয়।
এটি লেআউট ওজনের জন্য একই। Views
একটি অনুভূমিক মধ্যে LinearLayout
প্রতিটি মোট প্রস্থ একটি নির্দিষ্ট শতাংশ লাগতে পারে। (বা একটি উল্লম্ব জন্য উচ্চতার শতাংশ LinearLayout
।)
LinearLayout
কিছু ভালো আপনার ব্যবহারের দেখতে হবে:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- list of subviews -->
</LinearLayout>
মনে রাখবেন আপনি ব্যবহার করা আবশ্যক layout_width="match_parent"
জন্য LinearLayout
। আপনি যদি ব্যবহার করেন wrap_content
তবে তা কার্যকর হবে না। এছাড়াও লক্ষ করুন যে layout_weight
রিলেটিভলআউটগুলিতে দৃষ্টিভঙ্গির জন্য কাজ করে না ( এই সমস্যাটি মোকাবেলায় এসও উত্তরগুলির জন্য এখানে এবং এখানে দেখুন )।
একটি অনুভূমিক প্রতিটি দর্শন LinearLayout
দেখতে এরকম কিছু দেখায়:
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
নোট করুন যে আপনার layout_width="0dp"
সাথে একসাথে ব্যবহার করা প্রয়োজন layout_weight="1"
। এটি ভুলে যাওয়া অনেক নতুন ব্যবহারকারীদের সমস্যার কারণ হয়। ( এই নিবন্ধটি বিভিন্ন ফলাফলের জন্য দেখুন । প্রস্থটি ০. এ স্থাপন না করে আপনি পেতে পারেন) যদি আপনার মতামতগুলি উল্লম্ব হয় LinearLayout
তবে layout_height="0dp"
অবশ্যই আপনি ব্যবহার করবেন ।
ইন Button
আমি উপরোক্ত উদাহরণে 1 ওজন সেট, কিন্তু আপনি কোন সংখ্যা ব্যবহার করতে পারেন। এটি কেবল মোট বিষয়টিকেই বিবেচনা করে। আমি পোস্ট করা প্রথম চিত্রটিতে আপনি তিনটি সারি বোতামে দেখতে পাচ্ছেন, সংখ্যাগুলি সমস্ত আলাদা, তবে অনুপাতগুলি একই হওয়ায় প্রতিটি সারিতে ওজনযুক্ত প্রস্থগুলি পরিবর্তন হয় না। কিছু লোক দশমিক সংখ্যা ব্যবহার করতে পছন্দ করেন যার সমষ্টি 1 থাকে যাতে একটি জটিল বিন্যাসে এটি পরিষ্কার হয় যে প্রতিটি অংশের ওজন কী।
একটি চূড়ান্ত নোট। আপনার যদি নেস্টেড লেআউট ব্যবহার করে যা প্রচুর পরিমাণে ব্যবহার করে তবে layout_weight
এটি কার্য সম্পাদনের জন্য খারাপ হতে পারে।
শীর্ষ চিত্রের জন্য এখানে এক্সএমএল লেআউট রয়েছে:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android:layout_weight="
android:textSize="24sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="2" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android:layout_weight="
android:textSize="24sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="10"
android:text="10" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="20"
android:text="20" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="10"
android:text="10" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android:layout_weight="
android:textSize="24sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:text=".25" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".50"
android:text=".50" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight=".25"
android:text=".25" />
</LinearLayout>
</LinearLayout>
layout_weight
কীভাবে আপনার View
গুলি বিতরণ করবেন অ্যান্ড্রয়েডকে বলে LinearLayout
। অ্যান্ড্রয়েড তারপরে প্রথমে View
ওজনের নির্দিষ্ট পরিমাণের জন্য প্রয়োজনীয় সমস্ত অনুপাতের গণনা করে এবং প্রতিটি View
তার জন্য প্রয়োজনীয় পর্দার যে অংশটি প্রয়োজন তা নির্দিষ্ট করে according নিম্নলিখিত উদাহরণে, অ্যান্ড্রয়েড দেখে TextView
গুলি একটি আছে layout_weight
এর 0
(এই ডিফল্ট) এবং EditText
গুলি একটি আছে layout_weight
এর 2
যখন, প্রতিটি Button
ওজন হয়েছে 1
। তাই অ্যান্ড্রয়েড বরাদ্দ প্রদর্শনে 'যথেষ্ট' স্থান tvUsername
এবং tvPassword
এবং তারপর 5 সমান অংশ, যার দুই বরাদ্দ মধ্যে স্ক্রিন প্রস্থে বাকি ভাগ etUsername
, এর দুই etPassword
করুন এবং শেষ অংশ bLogin
:
<LinearLayout android:orientation="horizontal" ...>
<TextView android:id="@+id/tvUsername"
android:text="Username"
android:layout_width="wrap_content" ... />
<EditText android:id="@+id/etUsername"
android:layout_width="0dp"
android:layout_weight="2" ... />
<TextView android:id="@+id/tvPassword"
android:text="Password"
android:layout_width="wrap_content" />
<EditText android:id="@+id/etPassword"
android:layout_width="0dp"
android:layout_weight="2" ... />
<Button android:id="@+id/bLogin"
android:layout_width="0dp"
android:layout_weight="1"
android:text="Login"... />
</LinearLayout>
দেখে মনে হচ্ছে:
এবং
এটি সেভাবে ভাবেন, সহজ হবে
যদি আপনার কাছে 3 টি বোতাম থাকে এবং সেই অনুযায়ী তাদের ওজন 1,3,1 হয়, এটি HTML এ টেবিলের মতো কাজ করবে
এই লাইনের জন্য 5 অংশ সরবরাহ করুন: বোতাম 1 এর 1 অংশ, বোতাম 2 এর 3 অংশ এবং বোতাম 1 এর জন্য 1 অংশ সরবরাহ করুন
বিষয়ে
আমার জন্য সেরা ব্যাখ্যাগুলির মধ্যে একটি ছিল এটি (অ্যান্ড্রয়েড টিউটোরিয়াল থেকে, step ধাপ দেখুন) :
বিন্যাসের মধ্যে ভিউগুলিকে "গুরুত্ব" দেওয়ার জন্য লাইনআরআলআউটগুলিতে লেআউট_ওয়েট ব্যবহৃত হয়। সমস্ত দর্শনগুলির শূন্যের একটি ডিফল্ট বিন্যাস_ ওজন থাকে, যার অর্থ তারা স্ক্রিনে প্রদর্শিত হতে পারে কেবল তত বেশি জায়গা নেয়। শূন্যের চেয়ে উচ্চতর মান নির্ধারণ করা প্রতিটি ভিউর লেআউট_ ওয়েটের মান এবং এটি এবং অন্যান্য দেখার উপাদানগুলির জন্য বর্তমান লেআউটে উল্লিখিত সামগ্রিক লেআউট_ ওয়েটের অনুপাত অনুসারে প্যারেন্ট ভিউতে থাকা উপলব্ধ উপলব্ধ জায়গাগুলির বিভাজন ঘটবে।
একটি উদাহরণ দিতে: ধরা যাক আমাদের একটি অনুভূমিক সারিতে একটি পাঠ্য লেবেল এবং দুটি পাঠ্য সম্পাদনা উপাদান রয়েছে। লেবেলে কোনও লেআউট_ ওয়েট নির্দিষ্ট নেই, তাই এটি রেন্ডার করতে প্রয়োজনীয় ন্যূনতম স্থান নেয়। যদি দুটি পাঠ্য সম্পাদনা উপাদানের প্রত্যেকটির লেআউট_ ওয়েট 1 তে সেট করা থাকে তবে প্যারেন্ট লেআউটে অবশিষ্ট প্রস্থটি তাদের মধ্যে সমানভাবে বিভক্ত হবে (কারণ আমরা দাবি করি যে তারা সমান গুরুত্বপূর্ণ)। প্রথমটির যদি 1 এর লেআউট_ ওয়েট থাকে এবং দ্বিতীয়টির লেআউট_ ওয়েট 2 থাকে, তবে অবশিষ্ট স্থানের এক তৃতীয়াংশ প্রথমটিকে এবং দ্বিতীয় তৃতীয়াংশকে দ্বিতীয় দেওয়া হবে (কারণ আমরা দাবি করি যে দ্বিতীয়টি আরও গুরুত্বপূর্ণ)।
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
লেআউট_ওয়েট নির্ধারণ করে যে অন্যান্য নিয়ন্ত্রণের জন্য নিয়ন্ত্রণ কতটা স্থান পেতে হবে obtain
অতিরিক্ত জন্য:
জন্য vertical
স্থিতিবিন্যাস, সেট ভুলবেন না height
0dp করতে
android:layout_height="0dp"
জন্য horizontal
স্থিতিবিন্যাস, সেট ভুলবেন না width
0dp করতে
android:layout_width="0dp"
লিনিয়ারলআউটের ওয়েটসাম এবং প্রতিটি দৃশ্যের লেআউট_ ওয়েট দয়া করে দেখুন। অ্যান্ড্রয়েড: ওয়েটসাম = "4" অ্যান্ড্রয়েড: লেআউট_ ওয়েট = "2" অ্যান্ড্রয়েড: লেআউট_ ওয়েট = "2" তাদের লেআউট_ উচ্চতা উভয়ই 0 পিএক্স, তবে আমি নিশ্চিত নই যে এটি প্রাসঙ্গিক
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="4">
<fragment android:name="com.example.SettingFragment"
android:id="@+id/settingFragment"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="2"
/>
<Button
android:id="@+id/dummy_button"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="2"
android:text="DUMMY"
/>
</LinearLayout>
থেকে উভয় উত্তর একত্রিত
ফ্লো অ্যান্ড আরপিটিওস্টি এবং রোয়েজি,
আপনার পরিবর্তন করতে ভুলবেন layout_width=0dp/px
না, অন্যথায় layout_weight
আচরণটি সবচেয়ে সংখ্যক ক্ষুদ্রতম স্থান দখল করে এবং সবচেয়ে কম সংখ্যক বৃহত্তম স্থান দখল করে এমনটি বিপরীতভাবে কাজ করবে।
এছাড়াও, কিছু ওজন সংমিশ্রণের কারণে কিছু লেআউট দেখা যায় না (যেহেতু এটি স্থানটি দখল করে নিয়েছে)।
এ থেকে সাবধান থাকুন।
যোগ করা android:autoSizeTextType="uniform"
আপনার জন্য স্বয়ংক্রিয়ভাবে পাঠ্যের আকার পরিবর্তন করবে
নাম অনুসারে, লেআউট ওজন নির্দিষ্ট ক্ষেত্র বা উইজেটের স্ক্রিনের স্থানটি কত শতাংশ বা শতাংশের স্থান নির্ধারণ করবে তা সুনির্দিষ্ট করে।
আমরা যদি অনুভূমিক দিকনির্দেশনায় ওজন নির্দিষ্ট করে থাকি তবে অবশ্যই আমাদের নির্দিষ্ট করতে হবে layout_width = 0px
।
একইভাবে, যদি আমরা উলম্ব দিকের ওজন নির্দিষ্ট করে থাকি তবে অবশ্যই আমাদের নির্দিষ্ট করতে হবে layout_height = 0px
।