অ্যান্ড্রয়েডে লিনিয়ার লেআউট এবং ওজন


261

আমি সবসময় অ্যান্ড্রয়েড ডকুমেন্টেশনে এই মজাদার ওজনের মান সম্পর্কে পড়ি। এখন আমি প্রথমবারের জন্য এটি চেষ্টা করতে চাই কিন্তু এটি মোটেই কার্যকর হচ্ছে না।

আমি ডকুমেন্টেশনগুলি থেকে এই লেআউটটি বুঝতে পারি:

  <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dip"
        weight="1" />

  </LinearLayout>

অনুভূমিকভাবে প্রান্তীকৃত দুটি বোতাম তৈরি করা উচিত এবং স্থানটি সমানভাবে ভাগ করা উচিত। সমস্যাটি হ'ল দুটি বোতামটি স্থান পূরণ করতে বাড়বে না।

আমি বাটনগুলি বাড়িয়ে পুরো লাইনটি পূরণ করতে চাই। যদি উভয় বোতাম পিতামাতার সাথে মিলিত হয় তবে কেবলমাত্র প্রথম বোতামটি প্রদর্শিত হবে এবং পুরো লাইনটি পূরণ করে।


আপডেট: অ্যান্ড্রয়েড শতাংশ সমর্থনও এটি খুব ভাল করতে পারে। code2concept.blogspot.in/2015/08/…
নিতেশ

উত্তর:


159

আপনি layout_weightসম্পত্তি সেট করছেন না । আপনার কোড পড়ে weight="1"এবং এটি পড়া উচিত android:layout_weight="1"


684

3 টি মনে রাখতে হবে:

  • অ্যান্ড্রয়েড সেট করুন : বাচ্চাদের লেআউট_ প্রস্থকে "0 ডিপি" তে সেট করুন
  • অ্যান্ড্রয়েড সেট করুন : পিতামাতার ওয়েটসাম ( সম্পাদনা করুন: জেসন মুর যেমন লক্ষ্য করেছেন, এই বৈশিষ্ট্যটি alচ্ছিক, কারণ ডিফল্টরূপে এটি শিশুদের লেআউট_ ওয়েটের সমষ্টিতে সেট করা আছে)
  • অ্যান্ড্রয়েড সেট করুন : আনুপাতিকভাবে প্রতিটি সন্তানের লেআউট_ ওয়েট (যেমন ওজনসাম = "5", তিনটি শিশু: লেআউট_ ওয়েট = "1", লেআউট_ ওয়েট = "3", লেআউট_ ওয়েট = "1")

উদাহরণ:

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:weightSum="5">

    <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="3"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="3" />

    </LinearLayout>

এবং ফলাফল:

লেআউট ওজন উদাহরণ


66
প্রস্থ শূন্যে সেট করার বিষয়ে পরামর্শের জন্য ধন্যবাদ। আমি এটিও খুঁজে পেয়েছি যে পিতামাতার উপর ওয়েটসাম সেট করার প্রয়োজন ছিল না।
জেসন মুর

30
জানা ভাল, ধন্যবাদ। যদি তাই হয়, আপনি যখন বাচ্চাদের পিতামাতার 100% পূরণ করতে চান না তখন ওয়েটসাম সেট করা এখনও কার্যকর হতে পারে।
আনেকে

13
স্থির এক্সএমএল লেআউটের জন্য এটি সঠিক। যদি আপনি রানটাইমের সময় গতিশীলভাবে ভিউগুলি যুক্ত করে addView(button, new LinearLayout.LayoutParams(0, height, 1));থাকেন তবে আপনাকে লেআউট প্যারামিটারগুলির সাথে অ্যাডভিউ ব্যবহার করতে হবে যেমন আপনি সঠিক প্রস্থ এবং ওজন মানের সাথে লেআউট স্ফীত করছেন এমনকি এটি সত্য।
নুথ্যাচ

আপনি বলছেন যে অ্যান্ড্রয়েড সেট করুন: পিতামাতার ওয়েটসাম - এটি কোনও মূল্য সেট করুন বা কেবল এটিতে রেখে দিন, কীভাবে সেট করা উচিত?
জের্ম্ম

1
@ ব্যাটব্র্যাটটি সঠিক, আমি গতিশীলভাবে ইউআই তৈরি করছিলাম। আমি মাঝে মাঝে এক্সএমএল টুকরো টেমপ্লেট হিসাবে বিবেচনা করি এবং তারপরে রানটাইমে সংশোধন বা পপুলেট করি। এই কৌশলটি এই ক্ষেত্রে আমার পক্ষে কাজ করে নি, এটি কাজ করার জন্য আমাকে সুস্পষ্ট প্রস্থ এবং ওজনটি পুনরায় সেট করতে হয়েছিল।
নুথ্যাচ

52

এটা android:layout_weight। ওজন শুধুমাত্র ব্যবহৃত হতে পারে LinearLayout। লিনিয়ারলেআউটটির ওরিয়েন্টেশনটি যদি উল্লম্ব হয় তবে ব্যবহার করুন android:layout_height="0dp"এবং যদি ওরিয়েন্টেশনটি অনুভূমিক হয়, তবে ব্যবহার করুন android:layout_width = "0dp"। এটি পুরোপুরি কাজ করবে।


27

এই চিত্রটি লিনিয়ার বিন্যাসের সংক্ষিপ্তসার করে।

লিনিয়ার লেআউট এবং ওজন

বিষয়টিতে আরও তথ্যের জন্য আপনি এই লিঙ্কটি অনুসরণ করতে পারেন। জাস্ট ম্যাথস - ভিউ, গ্রুপ এবং লেআউটগুলি দেখুন

লিনিয়ার লেআউটের জন্য ভিডিও টিউটোরিয়াল: প্রস্থ, উচ্চতা এবং ওজন

অ্যান্ড্রয়েড লিনিয়ার লেআউট টিউটোরিয়াল


16

সেটিং ব্যবহার করে দেখুন layout_width"0dip" এবং উভয় বোতাম weightউভয় বোতাম0.5


এখন দুটি
বোতামই

ঠিক আছে, তারপরে ফিলিং প্যারেন্ট এবং ওজন 0.5
jqpubliq

কটাক্ষপাত করা এই এবং এই । এটি কেন এখনও কাজ করছে না সে সম্পর্কে আমি কিছুটা বিভ্রান্ত কিন্তু সম্ভবত এটি আপনাকে কল্প ধারণা দেবে।
jqpubliq

7

লিনিয়ারলআউট পৃথক বাচ্চাদের ওজন নির্ধারণকে সমর্থন করে। এই বৈশিষ্ট্যটি একটি দর্শনকে একটি " গুরুত্ব " মান দেয় এবং এটি প্যারেন্ট ভিউতে থাকা কোনও অবশিষ্ট স্থান পূরণ করতে প্রসারিত করতে দেয়। ডিফল্ট ওজন শূন্য

সন্তানের মধ্যে যে কোনও অবশিষ্ট / অতিরিক্ত স্থান নির্ধারণের জন্য গণনা । (মোট স্থান নয়)

সন্তানের জন্য স্থান নির্ধারিত = (সন্তানের পৃথক ওজন) / (লিনিয়ার লেআউটে প্রতিটি শিশুর ওজনের যোগফল)

উদাহরণ (১): যদি সেখানে তিনটি পাঠ্য বাক্স থাকে এবং তার মধ্যে দুটি যদি 1 টি ওজন ঘোষণা করে, তৃতীয়টির কোনও ওজন (0) না দেওয়া হয়, তবে অবশিষ্ট / অতিরিক্ত স্থান বরাদ্দ করা হবে

1st text box = 1/(1+1+0) 
2nd text box = 1/(1+1+0) 
3rd text box = 0/(1+1+0) 

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

calculation : 
1st label = 0/(0+1+1) 
2nd text box = 1/(0+1+1) 
3rd text box = 1/(0+1+1)

প্রথম একটি পাঠ্য বাক্সের যদি 1 এর লেআউট_ ওয়েট থাকে এবং দ্বিতীয় পাঠ্য বাক্সের লেআউট_ ওয়েট থাকে 2, তবে অবশিষ্ট স্থানের এক তৃতীয়াংশ প্রথমটিকে এবং দ্বিতীয় তৃতীয়াংশকে দ্বিতীয় দেওয়া হবে (কারণ আমরা দাবি করি যে দ্বিতীয়টি হ'ল বেশি গুরুত্বপূর্ণ).

calculation : 
1st label = 0/(0+1+2) 
2nd text box = 1/(0+1+2) 
3rd text box = 2/(0+1+2) 

7

বোতাম প্রস্থ ক্ষেত্রে, প্রতিস্থাপন wrap-contentসঙ্গে 0dp
একটি দৃশ্যের লেআউট_ওয়েট বৈশিষ্ট্য ব্যবহার করুন।

android:layout_width="0dp"  

আপনার কোডটি দেখতে কেমন হবে:

<LinearLayout
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal">

 <Button
    android:text="Register"
    android:id="@+id/register"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:layout_weight="1" />

 <Button
    android:text="Not this time"
    android:id="@+id/cancel"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:layout_weight="1" />    

</LinearLayout>

লেআউট_ওয়েট যা কিছু অবশিষ্ট স্থান অনুপাতে বিতরণ করতে ব্যবহৃত হয়। এই ক্ষেত্রে, দুটি বোতাম "0 ডিপি" প্রস্থ নিচ্ছে। সুতরাং, অবশিষ্ট স্থানটি তাদের মধ্যে 1: 1 অনুপাতে ভাগ করা হবে, অর্থাৎ স্থানটি বোতাম দর্শনের মধ্যে সমানভাবে বিভক্ত হবে।


6

@ মনোজ সিলানের উত্তর পছন্দ করুন

প্রতিস্থাপন android:layout_weightসঙ্গে android:weight

আপনি যখন ওজন সহ ব্যবহার করবেন LinearLayout। আপনি যোগ করতে হবে weightSumসালে LinearLayoutএবং আপনার সজ্জার অনুযায়ী LinearLayoutআপনি সেটিং আবশ্যক 0dpসব থেকে প্রস্থ জন্য / উচ্চতা LinearLayout`শিশু মতামত গুলি

উদাহরণ:

যদি ওরিয়েন্টেশন Linearlayoutহয় Verticalতবে তার সাথে সমস্ত LinearLayoutশিশুদের দর্শনগুলির প্রস্থ নির্ধারণ করুন0dp

 <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:weightSum="3">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="2" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="1" />

  </LinearLayout>

যদি ওরিয়েন্টেশন Linearlayoutহয় horizontalতবে তার সাথে সমস্ত LinearLayoutশিশুদের দর্শনগুলির উচ্চতা সেট করুন 0dp

 <LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     android:weightSum="3">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:padding="10dip"
        android:layout_weight="2" />

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:padding="10dip"
        android:layout_weight="1" />

  </LinearLayout>

5

উভয় বোতামের বিন্যাস_পরিচয় বৈশিষ্ট্যগুলি "ফিল_প্যারেন্ট" এ সেট করা সম্ভবত কৌশলটি করবে।

আমি কেবল এই কোডটি পরীক্ষা করেছি এবং এটি এমুলেটরটিতে কাজ করে:

<LinearLayout android:layout_width="fill_parent"
          android:layout_height="wrap_content">

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="hello world"/>

    <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="goodbye world"/>

</LinearLayout>

উভয় বোতামে "ফিল_প্যারেন্ট" - এ লেআউট_পথ সেট করার বিষয়ে নিশ্চিত হন।


1
এটি কেবলমাত্র স্ক্রিনের বাইরে ডান বোতামটি চাপায় এবং কেবল প্রথম বোতামটি দেখায়।
জানুজ্জ

4
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/logonFormButtons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="true"       
        android:orientation="horizontal">

        <Button
            android:id="@+id/logonFormBTLogon"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"            
            android:text="@string/logon"
            android:layout_weight="0.5" />

        <Button
            android:id="@+id/logonFormBTCancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"            
            android:text="@string/cancel"
            android:layout_weight="0.5" />
    </LinearLayout>

এখন আমি বরং লেআউট_ ওয়েট = "50" এবং লেআউট_উইথ = "0 পিএক্স"
ইয়ার

2

উপরের এক্সএমএলে, android:layout_weightরৈখিক বিন্যাসের সেটটি সেট করুন 2: android:layout_weight="2"


3
কেন এটি প্রয়োজন? 2 এর লেআউটের ওজন কেন গুরুত্বপূর্ণ? 20 বা 200 না কেন?
কনরাড ফ্রিক্স

2

এছাড়াও আপনার android:layout_width="0dp"বাচ্চাদের মতামত [বোতামের দর্শন] এর জন্য এটি যুক্ত করতে হবেLinerLayout


2

আপনার এটি আমার জন্য এটির মতো লিখতে হবে

<LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
            android:weightSum="2">

         <Button
            android:text="Register"
            android:id="@+id/register"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:layout_weight="1" />

         <Button
            android:text="Not this time"
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:layout_weight="1" />

2

নীচে পরিবর্তনগুলি (চিহ্নিত করা হয় গাঢ় ) আপনার কোডে:

<LinearLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <Button
        android:text="Register"
        android:id="@+id/register"
        android:layout_width="0dp" //changes made here
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="1" /> //changes made here

     <Button
        android:text="Not this time"
        android:id="@+id/cancel"
        android:layout_width="0dp" //changes made here
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_weight="1" /> //changes made here

  </LinearLayout>

যেহেতু আপনার লিনিয়ারলআউটের অনুভূমিক হিসাবে ওরিয়েন্টেশন রয়েছে, সুতরাং আপনার প্রস্থটি কেবল 0 ডিপি হিসাবে রাখতে হবে যে দিকে ওজন ব্যবহার করার জন্য। (যদি আপনার ওরিয়েন্টেশনটি উল্লম্ব হয়ে থাকে তবে আপনি নিজের উচ্চতাটি কেবল 0 ডিপি রাখতেন)

যেহেতু 2 টি মতামত রয়েছে এবং আপনি android:layout_weight="1"উভয় মতামতের জন্য রেখেছেন, এর অর্থ এটি উভয় মতামতকে অনুভূমিক দিক (বা প্রস্থের দ্বারা) সমানভাবে ভাগ করবে।


1
 <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Button 1" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="Button 2" />

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="Button 3" />

    </LinearLayout>

0

এটি আপনার সমস্যার নিখুঁত উত্তর

  <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:orientation="horizontal"  >   
     <Button 
        android:text="Register" android:id="@+id/register"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:padding="10dip" weight="1" />
     <Button 
        android:text="Not this time" android:id="@+id/cancel"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:padding="10dip" weight="1" />
  </LinearLayout>

3
তাহলে কি এটি "ওজন" বা "লেআউট_ ওয়েট" ??
ইগোরগানাপলস্কি

এটি অ্যান্ড্রয়েড: লেআউট_ ওয়েট
মহেন্দ্র


0
 <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:background="#008">

            <RelativeLayout
                android:id="@+id/paneltamrin"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"

                >
                <Button
                    android:id="@+id/BtnT1"
                    android:layout_width="wrap_content"
                    android:layout_height="150dp"
                    android:drawableTop="@android:drawable/ic_menu_edit"
                    android:drawablePadding="6dp"
                    android:padding="15dp"
                    android:text="AndroidDhina"
                    android:textColor="#000"
                    android:textStyle="bold" />
            </RelativeLayout>

            <RelativeLayout
                android:id="@+id/paneltamrin2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                >
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="150dp"
                     android:drawableTop="@android:drawable/ic_menu_edit"
                    android:drawablePadding="6dp"
                    android:padding="15dp"
                    android:text="AndroidDhina"
                    android:textColor="#000"
                    android:textStyle="bold" />

            </RelativeLayout>
        </LinearLayout>

এখানে চিত্র বর্ণনা লিখুন

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