কীভাবে বিন্যাসের সাহায্যে অবশিষ্ট স্থান পূরণ করবেন?


188

আমি আমার অ্যাপ্লিকেশন ইউআই ডিজাইন করছি। আমার মতো লেআউট লাগবে:

কাঙ্ক্ষিত বিন্যাসের উদাহরণ

(<এবং> বোতাম)। সমস্যাটি হচ্ছে, টেক্সটভিউতে দুটি বোতামের স্থির আকারের সাথে বাকী জায়গাটি কীভাবে পূরণ করা হবে তা নিশ্চিত করতে আমি জানি না।

আমি যদি পাঠ্য দৃশ্যের জন্য ফিল_প্যারেন্ট ব্যবহার করি তবে দ্বিতীয় বোতামটি (>) প্রদর্শিত হবে না।

আমি চিত্রটির মতো দেখতে একটি বিন্যাস কীভাবে তৈরি করব?


আপনি মূল বিন্যাস হিসাবে কি ব্যবহার করবেন?
উডশয়

1
@ উডশি কোনও লেআউট ঠিক আছে, তাতে কিছু যায় আসে না।
লুক ভিও

উত্তর:


211

উডশাইয়ের উত্তর আমার পক্ষে কাজ করেছিল এবং এটি উংগেরানু লিভিউর উত্তর চেয়ে সহজ, কারণ এটি ব্যবহার করে না RelativeLayout। আমি আমার লেআউটটি স্পষ্টতার জন্য দিচ্ছি:

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

     <Button
        android:layout_width = "80dp"
        android:layout_weight = "0"
        android:layout_height = "wrap_content"
        android:text="&lt;"/>
     <TextView
        android:layout_width = "fill_parent"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"/>
     <Button
        android:layout_width = "80dp"
        android:layout_weight = "0"
        android:layout_height = "wrap_content"
        android:text="&gt;"/>   
 </LinearLayout>

মত somethings হয় alignLeftএবং alignParentLeftইত্যাদি, যা দিয়ে কখনো অর্জন করা যেতে পারে LinearLayout
আইসিফ্লেমে

এটি কীভাবে সম্ভব তা আমি পুরোপুরি বুঝতে পারি না তবে
রিলেটিভলআউট

2
এটি কীভাবে গ্রহণযোগ্য উত্তর হতে পারে? কোনও চিত্রের ভিউ নেই, এটি কেবলমাত্র সমাধানের অংশ। আপেক্ষিক লেআউট সহ পুরানো শীর্ষে দেওয়া উত্তরের চেয়ে কমপক্ষে এটি ভাল (আমি কেন আমার উত্তরে ব্যাখ্যা করেছি)
লিভিও

প্রতিভা সমাধান
মোহাম্মদ এলসায়দ

92

যদি <টেক্সট ভিউ> লিনিয়ারলআউটে স্থাপন করা হয় তবে টেক্সটভিউয়ের জন্য <এবং> 0 এবং 1 এর লেআউট_ওয়েটের স্বত্ব সেট করুন।
আপেক্ষিক লেআউট এর ক্ষেত্রে <এবং> বাম এবং ডানদিকে প্রান্তিককরণ করুন এবং <এবং> এর আইডিতে টেক্সটভিউয়ের সম্পত্তি "লেআউট থেকে বামে" এবং "লেআউট থেকে ডান" সেট করুন


কারও কি এখনও নমুনা লাগবে?
উডশয়

পুরো ভিউটি পূরণ করতে এই বিন্যাসে কীভাবে চিত্রগুলি যুক্ত করা যায়
তুষার পান্ডে

পুরো ভিউটি পূরণ করতে আপনি কীভাবে আপেক্ষিক বিন্যাসের মধ্যে চিত্র যুক্ত করবেন
তুষার পান্ডে

4
@ উডশি হ্যাঁ একটি নমুনা এখনও সহায়ক হবে
ফ্র্যাঙ্ক শোয়েটারম্যান


71

আপনি যদি ব্যবহার করেন তবে আপনি RelativeLayoutএটির মতো কিছু করতে পারেন:

<RelativeLayout
    android:layout_width = "fill_parent"
    android:layout_height = "fill_parent">
    <ImageView
        android:id = "@+id/my_image"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_alignParentTop ="true" />
    <RelativeLayout
        android:id="@+id/layout_bottom"
        android:layout_width="fill_parent"
        android:layout_height = "50dp"
        android:layout_alignParentBottom = "true">
        <Button
            android:id = "@+id/but_left"
            android:layout_width = "80dp"
            android:layout_height = "wrap_content"
            android:text="&lt;"
            android:layout_alignParentLeft = "true"/>
        <TextView
            android:layout_width = "fill_parent"
            android:layout_height = "wrap_content"
            android:layout_toLeftOf = "@+id/but_right"
            android:layout_toRightOf = "@id/but_left" />
        <Button
            android:id = "@id/but_right"
            android:layout_width = "80dp"
            android:layout_height = "wrap_content"
            android:text="&gt;"
            android:layout_alignParentRight = "true"/>
    </RelativeLayout>
</RelativeLayout>

ধন্যবাদ, এটি কাজ করে :) তবে আমি বুঝতে পারি না। কেন টেক্সটভিউ >বোতামের জন্য নয়, সমস্ত স্থান পূরণ করে না ?
লুক ভো

2
দুটি নেস্টেড আপেক্ষিক বিন্যাস কেন? মূলটি যথেষ্ট হওয়া উচিত। তারপরে, আপনাকে যা করতে হবে তা নিশ্চিত করা উচিত যে নীচের তুলনামূলক বিন্যাসের শিশুরা সমস্ত alignParentBottom = "সত্য"
নোয়েল

@ নোয়েল আপনি ঠিক বলেছেন আমি 2 লেআউটটি বেছে নিই কারণ আমার এইভাবে ব্যবহার করা হচ্ছে: আমার অ্যাপ্লিকেশনগুলিতে এমনটি ঘটতে পারে যে আমাকে কয়েকটি দৃশ্যের দৃশ্যমানতা পরিবর্তন করতে হবে এবং কেবলমাত্র এই বিন্যাসটির জন্য এগুলি সমস্তকে রাখা এবং দৃশ্যমানতা পরিবর্তন করা আরও সহজ । আমার উদাহরণটি নিখুঁত নয় তবে এটি কাজ করে এবং এটি কারও পক্ষে উপকারী।
উঙ্গুরেয়ানু লিভিউ

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

2
এই উত্তরটি সত্যিই খারাপ! আপনার 2 টি আপেক্ষিক বিন্যাস বাসা বাঁধতে হবে যেহেতু আপেক্ষিক লেআউটটি সবসময় অঙ্কনের জন্য 2 পাস করে (অন্য কোনও ধরণের বিন্যাসের জন্য 1 এর বিপরীতে)। আপনি তাদের বাসা বেঁধে দিলে এটি ঘৃণ্য হয়ে ওঠে। আপনি যে উপাদানটি বামে স্থান পূরণ করতে চান তাতে আপনার প্রস্থ = 0 এবং ওজন = 1 সহ রৈখিক লেআউট ব্যবহার করা উচিত। মনে রাখবেন: যখন আপনার অন্য পছন্দ না থাকে কেবল তখন আপেক্ষিক লেআউটটি ব্যবহার করুন। stackoverflow.com/questions/4069037/…
লিভিও

30

একটি ব্যবহার করে ConstraintLayout, আমি এর মতো কিছু পেয়েছি

<Button
    android:id="@+id/left_button"
    android:layout_width="80dp"
    android:layout_height="48dp"
    android:text="&lt;"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toRightOf="@+id/left_button"
    app:layout_constraintRight_toLeftOf="@+id/right_button"
    app:layout_constraintTop_toTopOf="parent" />

<Button
    android:id="@+id/right_button"
    android:layout_width="80dp"
    android:layout_height="48dp"
    android:text="&gt;"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

কাজ করে। কীটি ডান, বাম, শীর্ষ এবং নীচের প্রান্তের সীমাবদ্ধতাগুলি যথাযথভাবে সেট করছে, তারপরে প্রস্থ এবং উচ্চতা নির্ধারণ করছে এবং 0dpএটিকে তার নিজস্ব আকার নির্ধারণ করতে দিচ্ছে।


4
কেবল কনস্ট্রেন্টলআউট ব্যবহার শুরু করা, এটি জেনে রাখা দুর্দান্ত যে প্রস্থ এবং
উচ্চতাগুলি

প্রতিটি সীমাবদ্ধতার তীরের দিকটি সম্পর্কে সতর্ক হওয়া গুরুত্বপূর্ণ । TextViewবাম এবং ডান সীমাবদ্ধতা আছে তা নিশ্চিত করুন । TextViewপ্রসারিত নেই যদি প্রথম Buttonকরার অধিকার বাধ্যতা হয়েছে TextViewএবং গত Buttonবাম বাধ্যতা হয়েছে TextView
ম্যানুয়েল

অনেক ভাল! নেস্টেড লেআউট না রেখে কর্মক্ষমতা উন্নত করে। 0dp কৌশল সম্পর্কে আমাদের মনে করিয়ে দেওয়ার জন্য ধন্যবাদ
ওজি দ্যজেন্ট

7

এটি সহজ আপনি minWidth বা minHeight সেট করেন, আপনি যা খুঁজছেন তার উপর নির্ভর করে, অনুভূমিক বা উল্লম্ব। এবং অন্য অবজেক্টের জন্য (যেটি আপনি অবশিষ্ট স্থানটি পূরণ করতে চান) আপনি 1 এর ওজন নির্ধারণ করুন (এর সামগ্রীকে মোড়ানোর জন্য প্রস্থটি সেট করুন), সুতরাং এটি বাকী অংশটি পূরণ করবে।

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center|left"
        android:orientation="vertical" >
</LinearLayout>
<LinearLayout
        android:layout_width="80dp"
        android:layout_height="fill_parent"
        android:minWidth="80dp" >
</LinearLayout>

4

আপনি উচ্চ লেআউট_ওয়েট বৈশিষ্ট্যটি ব্যবহার করতে পারেন। নীচে আপনি একটি বিন্যাস দেখতে পারেন যেখানে তালিকার ভিউ নীচে নীচে বোতামগুলির সাথে সমস্ত খালি স্থান নেয়:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".ConfigurationActivity"
    android:orientation="vertical"
    >

        <ListView
            android:id="@+id/listView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1000"
            />


        <Button
            android:id="@+id/btnCreateNewRule"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Create New Rule" />



        <Button
            android:id="@+id/btnConfigureOk"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Ok" />


</LinearLayout>

3

<LinearLayout...>আমার মতো একই ত্রুটিযুক্ত ব্যক্তিদের জন্য :

এটি নির্দিষ্ট করা গুরুত্বপূর্ণ android:layout_width="fill_parent", এটি দিয়ে কাজ করবে না wrap_content

OTOH, আপনি বাদ দিতে পারেন android:layout_weight = "0", এটি প্রয়োজন হয় না।

আমার কোডটি মূলত https://stackoverflow.com/a/25781167/755804 (বিবেক পান্ডে দ্বারা) কোডের মতো


3

আপনার 2 টি আপেক্ষিক বিন্যাস বাসা বাঁধতে হবে যেহেতু আপেক্ষিক লেআউটটি সবসময় অঙ্কনের জন্য 2 পাস করে (অন্য কোনও ধরণের বিন্যাসের জন্য 1 এর বিপরীতে)। আপনি এগুলিকে বাসা বেঁধে দেওয়ার সময় এটি ঘৃণ্য হয়ে ওঠে। আপনি যে উপাদানটি বামে স্থান পূরণ করতে চান তাতে আপনার প্রস্থ = 0 এবং ওজন = 1 সহ রৈখিক লেআউট ব্যবহার করা উচিত। এই উত্তরটি কার্য সম্পাদন এবং অনুশীলনের জন্য ভাল। মনে রাখবেন: যখন আপনার অন্য পছন্দ না থাকে কেবল তখন আপেক্ষিক লেআউটটি ব্যবহার করুন।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">

    <ImageView
        android:id="@+id/imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/prev_button"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="&lt;" />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ellipsize="end"
            android:singleLine="true"
            android:gravity="center"
            android:text="TextView" />

        <Button
            android:id="@+id/next_button"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="&gt;" />
    </LinearLayout>
</LinearLayout>

0

আপনি সেট ব্যবহার করতে পারেন layout_widthবা layout_widthকরার 0dp(অভিযোজন করার মাধ্যমে আপনি অবশিষ্ট স্থান প্রয়োগ করতে চান)। তারপরে এটি ব্যবহার করে layout_weightঅবশিষ্ট স্থানটি পূরণ করুন।


0

লিনিয়ারলআউট মোড়ানোর জন্য একটি সম্পর্কিত সম্পর্কিত ব্যবহার করুন

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:round="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical">
    <Button
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text="&lt;"/>
    <TextView
        android:layout_width = "fill_parent"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"/>
    <Button
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text="&gt;"/>

</LinearLayout>

</RelativeLayout>`

0

আমি খুঁজে পেয়েছি

 <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginEnd="10dp"
        android:fontFamily="casual"
        android:text="(By Zeus B0t)"
     ``   android:textSize="10sp"
        android:gravity="bottom"
        android:textStyle="italic" />

0

আপেক্ষিক বিন্যাস ব্যবহার করার সময়, আপনি যে দৃশ্যের দিকে প্রসারিত হবেন বলে মনে করেন উভয়ই এটি অ্যাঙ্কর করে একটি ভিউ প্রসারিত করতে পারেন। যদিও নির্দিষ্ট উচ্চতা উপেক্ষা করা হবে, অ্যান্ড্রয়েডের এখনও একটি উচ্চতার বৈশিষ্ট্য প্রয়োজন, যার কারণেই আমি "0 ডিপি" লিখেছিলাম। উদাহরণ:

<View
    android:id="@+id/topView"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_alignParentTop="true"
    android:layout_marginTop="8dp"/>

<View
    android:id="@+id/stretchableView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_below="@id/topView"
    android:layout_above="@+id/bottomView"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:adjustViewBounds="true"/>

<View
    android:id="@id/bottomView"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="16dp"/>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.