আপেক্ষিক লেআউটে শতাংশের প্রস্থ width


450

আমি Activityআমার অ্যান্ড্রয়েড অ্যাপে লগইনের জন্য একটি ফর্ম বিন্যাসে কাজ করছি । নীচের চিত্রটি আমি কীভাবে এটি দেখতে চাই তা হল:

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

আমি নিম্নলিখিত XML সহ এই বিন্যাসটি অর্জন করতে সক্ষম হয়েছি । সমস্যাটি হচ্ছে, এটি কিছুটা হ্যাকিশ। হোস্ট এডিটেক্সট-এর জন্য আমাকে প্রস্থের হার্ড-কোড করতে হয়েছিল। বিশেষত, আমাকে উল্লেখ করতে হয়েছিল:

android:layout_width="172dp" 

আমি হোস্ট এবং পোর্ট এডিটেক্সটকে সত্যই শতাংশের প্রস্থ দিতে চাই। (হোস্টের জন্য 80%, বন্দরের জন্য 20% এর মতো কিছু)) এটি কি সম্ভব? নিম্নলিখিত এক্সএমএলটি আমার ড্রয়েডে কাজ করে তবে মনে হয় এটি সমস্ত পর্দার জন্য কাজ করে না। আমি সত্যিই আরও দৃust় সমাধান চাই।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/home"
        android:paddingLeft="15dp"
        android:paddingTop="0dp"
        android:text="host"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/home"
        android:layout_toRightOf="@+id/host_input"
        android:paddingTop="0dp"
        android:text="port"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="172dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/host_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/host_label"
        android:layout_marginTop="4dp"
        android:layout_toRightOf="@id/host_input"
        android:background="@android:drawable/editbox_background"
        android:inputType="number" />

    <TextView
        android:id="@+id/username_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/host_input"
        android:paddingLeft="15dp"
        android:paddingTop="15dp"
        android:text="username"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/username_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/username_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textEmailAddress" />

    <TextView
        android:id="@+id/password_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/username_input"
        android:paddingLeft="15dp"
        android:paddingTop="15dp"
        android:text="password"
        android:textColor="#a5d4e2"
        android:textSize="25sp"
        android:textStyle="normal" />

    <EditText
        android:id="@+id/password_input"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/password_label"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="4dp"
        android:background="@android:drawable/editbox_background"
        android:inputType="textPassword" />

    <ImageView
        android:id="@+id/home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="false"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="15dp"
        android:scaleType="fitStart"
        android:src="@drawable/home" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/password_input"
        android:layout_marginLeft="15dp"
        android:layout_marginTop="15dp"
        android:text="   login   "
        android:textSize="18sp" >
    </Button>

</RelativeLayout>

: আমি এই অনুরূপ প্রশ্নের উত্তর পরিষ্কার জিনিষ করতে কিছু সময় নেন stackoverflow.com/questions/7846614/...
hcpl

1
অ্যান্ড্রয়েড ব্যবহার করার বিষয়টি বিবেচনা করুন: টেক্সটভিউয়ের পরিবর্তে সম্পাদনা পাঠ্যসূচীতে ইঙ্গিত। স্থান বাঁচায়
almisoft

উত্তর:


760

আপনি android:layout_weightগুণটি সন্ধান করছেন। এটি আপনাকে আপনার লেআউটটি সংজ্ঞায়িত করতে শতাংশ ব্যবহার করার অনুমতি দেবে।

নিম্নলিখিত উদাহরণে, বাম বোতামটি 70% স্থান এবং ডান বোতামটি 30% ব্যবহার করে।

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

    <Button
        android:text="left" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".70" /> 

    <Button
        android:text="right" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight=".30" />

</LinearLayout>

এটি যে কোনও ধরণের ভিউয়ের সাথে একই কাজ করে, আপনি আপনার প্রয়োজন অনুসারে কিছু এডিটেক্সট দিয়ে বোতামগুলি প্রতিস্থাপন করতে পারেন।

সেট করতে ভুলবেন না layout_widthকরতে 0dpবা আপনার মতামত সঠিকভাবে ছোটো নাও হতে পারে।

নোট করুন যে ওজনের যোগফল 1 এর সমান হতে হবে না, আমি কেবল এটি পড়তে সহজ মনে করি। আপনি প্রথম ওজন 7 এবং দ্বিতীয় থেকে 3 তে সেট করতে পারেন এবং এটি একই ফলাফল দেবে।


171
এটি লিনিয়ারলআউট ব্যবহার করার জন্য অর্থবোধ করে তবে তিনি একটি রিলেটিভলআউট চেয়েছিলেন। কোনও লিস্ট আইটেমের জন্য আমাকে রিলেটিভ লেআউট ব্যবহার করতে হবে বলে এটি করার কোনও উপায় আছে
মাইকেল অ্যালেন

33
হ্যাঁ, আপনার আপেক্ষিক লেআউটের ভিতরে নেস্টেড লিনিয়ারলআউট তৈরি করুন, যেখানে আপনি শতাংশ ব্যবহার করতে চান।
ডালমাস

17
লাডাএইডার দ্বারা প্রদত্ত উত্তরটি কেবল তখনই আমার পক্ষে কাজ করে যখন আমি প্রস্থটি 0 পিএক্স এ সেট করি। অ্যান্ড্রয়েড: লেআউট_উইথ = "0 পিএক্স"
আনসির্ক রেড্ডি

6
অথবা একটি বোতামের পরিবর্তে কেবল একটি দৃশ্য। এটি আরও পরিষ্কার যে এটি কিছু করে না।
ল্যান্স নানেক

13
এই উত্তরটি পুরোপুরি কার্যকর হয়, তবে আপনি যদি কোনও রিলেটিভলআউট ব্যবহার করে মৃত হয়ে থাকেন , আপনি এখন সমর্থন লাইব্রেরি সংস্করণ ২৩.০.০ থেকে PercentRelativeLayout ব্যবহার করতে পারেন ।
নিট করে

290

এটি মূল প্রশ্নের পুরোপুরি উত্তর দেয় না, যা একটি 70/30 বিভক্তের জন্য ছিল, তবে উপাদানগুলির মধ্যে 50/50 বিভক্তের বিশেষ ক্ষেত্রে একটি উপায় রয়েছে: কেন্দ্রে একটি অদৃশ্য স্ট্র্ট রাখুন এবং অবস্থানটি অবস্থানের জন্য এটি ব্যবহার করুন আগ্রহের দুটি উপাদান।

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <View android:id="@+id/strut"
        android:layout_width="0dp"
        android:layout_height="0dp" 
        android:layout_centerHorizontal="true"/>
    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/strut"
        android:layout_alignParentLeft="true"
        android:text="Left"/> 
    <Button 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/strut"
        android:layout_alignParentRight="true"
        android:text="Right"/>
</RelativeLayout>

যেহেতু এটি একটি দুর্দান্ত সাধারণ ঘটনা, এই সমাধানটি কৌতূহলের চেয়ে বেশি। এটি কিছুটা হ্যাক তবে একটি দক্ষ একটি কারণ খালি, শূন্য আকারের স্ট্রুটটির দাম খুব কম হওয়া উচিত।

সাধারণভাবে, তবে স্টক অ্যান্ড্রয়েড লেআউটগুলি থেকে খুব বেশি আশা করা ভাল না ...


8
আমি সত্যিই ধারণা পছন্দ! আমি রিলেটিভলআউটটি অনেক পছন্দ করি এবং আমার পক্ষে টেবিললআউট ব্যবহার এড়াতে এটি আরও একটি কারণ। ধন্যবাদ! :)
মিরিচেল্ট

19
আমাদের কীভাবে পরিশ্রমের দরকার তা আমি জানতে চাই। এটি এইচটিএমএলের একটি প্রাথমিক এবং দীর্ঘস্থায়ী বৈশিষ্ট্য। লোকেরা কী কী প্রয়োজন এবং কী ব্যবহার করছে তা বোঝার জন্য অবশ্যই অ্যান্ড্রয়েড বিকাশকারীরা এইচটিএমএলটি দেখতে পারেন!
JohnK

2
@ জনক সম্পূর্ণরূপে একমত এইচটিএমএল / সিএসএস অ্যান্ড্রয়েড লেআউট সিস্টেমের চেয়ে অনেক ভাল এবং সাধারণ।
নিকো এডি

1
আমি যদি 70/30 এ অর্জন করতে চাই তবে কী হবে RelativeLayout?
আদিল মালিক

16
এমনকি android:visibility="invisible"
অনড্র

134

আপডেট 1

@EmJiHash দ্বারা নির্দিষ্ট হিসাবে PercentRelativeLayout মধ্যে অবচিত এপিআই স্তর 26.0.0

গুগলের মন্তব্য উদ্ধৃত করার নীচে:

এই শ্রেণীটি এপিআই স্তরের 26.0.0 এ অবমূল্যায়িত হয়েছিল। পরিবর্তে কনস্ট্রেন্টলয়েট এবং সম্পর্কিত লেআউটগুলি ব্যবহার করার বিষয়ে বিবেচনা করুন। নিম্নলিখিতটি কীভাবে কনস্ট্রেন্টলয়েট দিয়ে শতাংশ লেআউটের কার্যকারিতা প্রতিলিপি করতে হয় তা দেখায়


গুগল android.support.percent নামে নতুন এপিআই চালু করেছে

তারপরে আপনি কেবল দেখার জন্য শতাংশ নির্ধারণ করতে পারেন

সংকলন নির্ভরতা যুক্ত করুন

implementation 'com.android.support:percent:22.2.0

যে, PercentRelativeLayout কি আমরা শতকরা জ্ঞানী বিন্যাস করতে পারেন

 <android.support.percent.PercentRelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <ImageView
         app:layout_widthPercent="50%"
         app:layout_heightPercent="50%"
         app:layout_marginTopPercent="25%"
         app:layout_marginLeftPercent="25%"/>
 </android.support.percent.PercentRelativeLayout>

4
আপনি যদি এটির তালিকা আইটেমের জন্য ব্যবহার করতে চান তবে এটি কাজ করবে না
jemo mgebrishvili

1
এই শ্রেণীটি এপিআই স্তরের 26.0.0-beta1 এ অবচয় করা হয়েছিল। পরিবর্তে কনস্ট্রেন্টলআউট এবং সম্পর্কিত লেআউটগুলি ব্যবহারের বিষয়ে বিবেচনা করুন
এমজিহ্যাশ

1
সংকলন হ্রাস করা হয়, বাস্তবায়ন ব্যবহার করুন।
বে

81

আপনি রিলেটিভলআউটের অভ্যন্তরে কোনও ভিউয়ের মাত্রা নির্ধারণ করতে শতাংশ ব্যবহার করতে পারবেন না। এটি করার সর্বোত্তম উপায় হ'ল লিনিয়ারলআউট এবং ওজন বা কাস্টম লেআউট ব্যবহার করা।


15
আপনার উত্তর আপডেট করার সময়, আপনি এখানে নির্বাচিত একজন :)
Ultimo_m

31

আপনি নতুন শতাংশ সমর্থন লাইব্রেরি একবার দেখতে পারেন।

compile 'com.android.support:percent:22.2.0'

ডক্স

নমুনা


1
এই শ্রেণীটি এপিআই স্তরের 26.0.0-beta1 এ অবচয় করা হয়েছিল। পরিবর্তে কনস্ট্রেন্টলয়েট এবং সম্পর্কিত লেআউটগুলি ব্যবহার করার বিষয়ে বিবেচনা করুন।
এমজিহ্যাশ

19

আপনি PercentRelativeLayout ব্যবহার করতে পারেন , এটি ডিজাইন সমর্থন লাইব্রেরির সাম্প্রতিক অনিবন্ধিত সংযোজন , কেবল একে অপরের সাথে সম্পর্কিত উপাদানগুলি নয় , উপলব্ধ স্থানের মোট শতাংশের নির্দিষ্টকরণের ক্ষমতা সক্ষম করে ।

RelativeLayout এর সাবক্লাস যা শতাংশ ভিত্তিক মাত্রা এবং মার্জিনগুলিকে সমর্থন করে। "শতাংশ" প্রত্যয় সহ গুণাবলী ব্যবহার করে আপনি মাত্রা বা সন্তানের মার্জিন নির্দিষ্ট করতে পারেন।

<android.support.percent.PercentRelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
  <ImageView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:layout_widthPercent="50%"
      app:layout_heightPercent="50%"
      app:layout_marginTopPercent="25%"
      app:layout_marginLeftPercent="25%"/>
</android.support.percent.PercentFrameLayout>

পার্সেন্ট প্যাকেজটি আপনার অ্যাপ্লিকেশনটিতে শতাংশ ভিত্তিক মাত্রা যুক্ত এবং পরিচালনা করতে সহায়তা করার জন্য এপিআইগুলিকে সরবরাহ করে

ব্যবহার করতে, আপনার গ্র্যাডল নির্ভরতা তালিকায় এই লাইব্রেরিটি যুক্ত করতে হবে :

dependencies {
    compile 'com.android.support:percent:22.2.0'//23.1.1
}

1
তবুও সংজ্ঞা দেওয়া দরকারandroid:layout_width="match_parent"
li2

আমার একটি টেক্সটভিউতে একটি সমস্যা ছিল যা হরফ প্যাডিংয়ের ফলে পাঠ্য ক্রপ হচ্ছে এবং এটি এটি পুরোপুরি সমাধান করেছে। অনেক ধন্যবাদ!
dianakarenms

1
এই শ্রেণীটি এপিআই স্তরের 26.0.0-beta1 এ অবচয় করা হয়েছিল। পরিবর্তে
কনস্ট্র্যান্টলায়আউট

12

আমি এটি একটি কাস্টম ভিউ তৈরির সমাধান করেছি:

public class FractionalSizeView extends View {
  public FractionalSizeView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public FractionalSizeView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    setMeasuredDimension(width * 70 / 100, 0);
  }
}

এটি অদৃশ্য স্ট্র্ট আমি রিলেটিভলআউট এর মধ্যে অন্যান্য ভিউগুলি সারিবদ্ধ করতে ব্যবহার করতে পারি।


11

হালনাগাদ

@ এমজিজিহ্যাশ পার্সেন্টাল রিলেটিভলআউট এবং পার্সেন্টফ্রেমেলাউট দ্বারা নির্দেশিত হিসাবে এপিআই স্তরে 26.0.0

কনস্ট্রেন্টলয়েট ব্যবহার বিবেচনা করুন

গুগল android.support.percent নামে নতুন এপিআই চালু করেছে

1) PercentRelativeLayout

2) PercentFrameLayout

সংকলন নির্ভরতা যুক্ত করুন

compile 'com.android.support:percent:23.1.1'

আপনি শতাংশে মাত্রা নির্দিষ্ট করতে পারেন সুতরাং সুবিধা RelativeLayoutএবং শতাংশ উভয়ই পান

 <android.support.percent.PercentRelativeLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
     <TextView
         app:layout_widthPercent="40%"
         app:layout_heightPercent="40%"
         app:layout_marginTopPercent="15%"
         app:layout_marginLeftPercent="15%"/>
 </android.support.percent.PercentRelativeLayout/>

আপনি যদি এটির তালিকা আইটেমের জন্য ব্যবহার করতে চান তবে এটি কাজ করবে না
jemo mgebrishvili

1
এই শ্রেণীটি এপিআই স্তরের 26.0.0-beta1 এ অবচয় করা হয়েছিল। পরিবর্তে কনস্ট্রেন্টলয়েট এবং সম্পর্কিত লেআউটগুলি ব্যবহার করার বিষয়ে বিবেচনা করুন।
এমজিহ্যাশ

11

যেহেতু পার্সেন্টরেলিয়েটিভ লেআউটটি ২ 26.০.০-এ অবচিত করা হয়েছিল এবং রিলেটিভলআউট-এর অভ্যন্তরে লিনিয়ারলাইউটের মতো নেস্টেড লেআউটগুলি কার্যকারিতায় নেতিবাচক প্রভাব ফেলবে ( কনস্ট্রেন্টলয়েউটের পারফরম্যান্স সুবিধাগুলি বোঝা) ) আপনার শতাংশের প্রস্থ অর্জনের জন্য সেরা বিকল্পটি আপনার রিলেটিভলআউটকে কনস্ট্রেন্টলয়েউটের সাথে প্রতিস্থাপন করা।

এটি দুটি উপায়ে সমাধান করা যেতে পারে।

সমাধান # 1 শতাংশ অফসেট সহ নির্দেশিকা ব্যবহার করে

লেআউট সম্পাদক

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Host"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/host_input" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Port"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/port_input" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="textEmailAddress"
        app:layout_constraintTop_toBottomOf="@+id/host_label"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/guideline" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="number"
        app:layout_constraintTop_toBottomOf="@+id/port_label"
        app:layout_constraintLeft_toLeftOf="@+id/guideline"
        app:layout_constraintRight_toRightOf="parent" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.8" />

</android.support.constraint.ConstraintLayout>

সমাধান # 2 এডিট টেক্সটের জন্য ওজনযুক্ত প্রস্থ সহ চেইন ব্যবহার করা

লেআউট সম্পাদক

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/host_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Host"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/host_input" />

    <TextView
        android:id="@+id/port_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Port"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="8dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="@+id/port_input" />

    <EditText
        android:id="@+id/host_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="textEmailAddress"
        app:layout_constraintHorizontal_weight="0.8"
        app:layout_constraintTop_toBottomOf="@+id/host_label"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/port_input" />

    <EditText
        android:id="@+id/port_input"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:inputType="number"
        app:layout_constraintHorizontal_weight="0.2"
        app:layout_constraintTop_toBottomOf="@+id/port_label"
        app:layout_constraintLeft_toRightOf="@+id/host_input"
        app:layout_constraintRight_toRightOf="parent" />

</android.support.constraint.ConstraintLayout>

উভয় ক্ষেত্রেই আপনি এই জাতীয় কিছু পান

ফলাফল দেখুন


সীমাবদ্ধ লেআউটটি অনেক ধীর এবং বাগিগিয়ার
ড্রাগোস রাছিয়ারু

7

PercentRelativeLayoutসমর্থন লাইব্রেরির রিভিশন 26.0.0 থেকে অবচিত করা হয়েছে।

গুগল কনস্ট্রেন্টলআউট নামে একটি নতুন লেআউট চালু করেছে ।

আপনার মডিউল-স্তরের বিল্ড.gradle ফাইলটিতে পাঠাগারটি নির্ভরতা হিসাবে যুক্ত করুন:

     dependencies {
        compile 'com.android.support.constraint:constraint-layout:1.0.1'
      }

একটি লেআউট ফাইল যুক্ত করুন:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>

সীমাবদ্ধতাসমূহ

সীমাবদ্ধতাগুলি আপনাকে উইজেটগুলি সারিবদ্ধ রাখতে সহায়তা করে। আপনি বিভিন্ন উইজেটের মধ্যে প্রান্তিককরণের নিয়মগুলি নির্ধারণ করতে নীচে দেখানো সীমাবদ্ধতা হ্যান্ডলগুলির মতো অ্যাঙ্কর ব্যবহার করতে পারেন।

  1. Wrap Content: ভিউটি এর সামগ্রীতে ফিট করার জন্য প্রয়োজনীয় হিসাবে প্রসারিত হয়।
  2. Match Constraints: মার্জিনের জন্য অ্যাকাউন্টিংয়ের পরে তার সীমাবদ্ধতার সংজ্ঞাটি পূরণ করার প্রয়োজন হিসাবে ভিউটি প্রসারিত হয়। যাইহোক, যদি প্রদত্ত মাত্রার কেবল একটি মাত্র বাধা থাকে, তবে ভিউটি এর সামগ্রীতে ফিট করার জন্য প্রসারিত হয়। উচ্চতা বা প্রস্থ উভয়ই এই মোডটি ব্যবহার করা আপনাকে একটি আকারের অনুপাত সেট করতে দেয়।
  3. Fixed: আপনি নীচে পাঠ্য বাক্সে বা সম্পাদকের ভিউটির আকার পরিবর্তন করে একটি নির্দিষ্ট মাত্রা নির্দিষ্ট করেছেন।
  4. Spread: মতামতগুলি সমানভাবে বিতরণ করা হয় (মার্জিন হিসাবে গণ্য করার পরে)। এটি ডিফল্ট।
  5. Spread inside: প্রথম এবং শেষ দর্শনটি চেইনের প্রতিটি প্রান্তে সীমাবদ্ধতার সাথে সংযুক্ত এবং বাকিগুলি সমানভাবে বিতরণ করা হয়।
  6. Weighted: যখন চেইনটি হয় ভিতরে ছড়িয়ে দেওয়া বা ছড়িয়ে দেওয়া সেট করা হয়, আপনি "ম্যাচের সীমাবদ্ধতা" (0 ডিপি) এ এক বা একাধিক মতামত সেট করে অবশিষ্ট স্থানটি পূরণ করতে পারেন। ডিফল্টরূপে, স্থানটি "ভিড়ের সাথে ম্যাচ করার ক্ষেত্রে" নির্ধারিত প্রতিটি দৃশ্যের মধ্যে সমানভাবে বিতরণ করা হয় তবে আপনি বিন্যাস_সংশোধনহরিজেন্টাল_ওয়েট এবং লেআউট_কন্ট্রাইন্ট ভার্টিকাল_ওয়েট বৈশিষ্ট্যগুলি ব্যবহার করে প্রতিটি দর্শনকে গুরুত্বের ওজন নির্ধারণ করতে পারেন। আপনি যদি লিনিয়ার লেআউটে লেআউট_ ওয়েটের সাথে পরিচিত হন তবে এটি একইভাবে কাজ করে। সুতরাং সর্বাধিক ওজনের মানযুক্ত দর্শনটি সর্বাধিক পরিমাণে স্থান পায়; একই ওজনযুক্ত দর্শনগুলি একই পরিমাণে স্থান পায়।
  7. Packed: দর্শনগুলি একসাথে প্যাক করা হয়েছে (মার্জিনের জন্য গণ্য হওয়ার পরে)। তারপরে আপনি চেইনের মাথা দর্শন পক্ষপাতটি পরিবর্তন করে পুরো চেইনের পক্ষপাত (বাম / ডান বা উপরে / নিচে) সামঞ্জস্য করতে পারেন।
  8. Center Horizontally or Center Vertically: দেখুন দৃশ্যের দ্রুত শৃঙ্খলা তৈরি করতে, সেগুলি সমস্ত নির্বাচন করুন, একটি দর্শনকে ডান ক্লিক করুন এবং তারপরে অনুভূমিক বা উল্লম্ব শৃঙ্খলা তৈরি করতে, অনুভূমিকভাবে কেন্দ্র বা উল্লম্বভাবে কেন্দ্র নির্বাচন করুন
  9. Baseline alignment: একটি দর্শনটির পাঠ্য বেসলাইনটিকে অন্য ভিউয়ের পাঠ্য বেসলাইনে সারিবদ্ধ করুন।
  10. Constrain to a guideline: আপনি এমন একটি উল্লম্ব বা অনুভূমিক নির্দেশিকা যুক্ত করতে পারেন যাতে আপনি দৃশ্যের সীমাবদ্ধ করতে পারেন এবং গাইডলাইনটি অ্যাপ ব্যবহারকারীদের কাছে অদৃশ্য হয়ে থাকবে। আপনি লেপিটির প্রান্ত অনুসারে ডিপি ইউনিট বা শতাংশের উপর ভিত্তি করে বিন্যাসের মধ্যে গাইডলাইনটি অবস্থান করতে পারেন।
  11. Adjust the constraint bias: আপনি যখন কোনও দৃশ্যের উভয় দিকে একটি সীমাবদ্ধতা যুক্ত করেন (এবং একই মাত্রার জন্য দর্শন আকারটি "স্থির" বা "মোড়ানো বিষয়বস্তু" হয়) তখন দৃশ্যটি ডিফল্টরূপে 50% এর পক্ষপাত নিয়ে দুটি সীমাবদ্ধতার মাঝে কেন্দ্রীভূত হয়। প্রোপার্টি উইন্ডোতে বায়াস স্লাইডার টেনে আপনি পক্ষপাত সামঞ্জস্য করতে পারেন
  12. Set size as a ratio: ভিউয়ের আকারটিকে 16: 9 এর মতো অনুপাতের সাথে সেট করতে পারেন যদি কমপক্ষে দেখার মাত্রার একটি মাত্রাকে "ম্যাচের সীমাবদ্ধতা" (0 ডিপি) তে সেট করা থাকে।

আপনি অফিসিয়াল ডক থেকে আরও শিখতে পারেন ।


3

আপনি লেআউট ওজনের মাধ্যমে এটি সম্পাদন করতে পারেন। একটি ওজন নির্দেশ দেয় যে কীভাবে পর্দার দাবিবিহীন অংশগুলি বিভক্ত হয়। প্রতিটি এডিটেক্সটকে 0 এর একটি বিন্যাস_ প্রস্থ এবং কিছু আনুপাতিক ওজন দিন। উদাহরণস্বরূপ, যদি প্রথমটি দ্বিগুণ স্থান গ্রহণ করতে চান তবে একটির ওজন 2 এবং অন্যটি 1 এর ওজন দিন।


3

আকর্ষণীয়ভাবে যথেষ্ট, @ অ্যালফেভেরের উত্তরের ভিত্তিতে, কেউ কেবল "অদৃশ্য স্ট্রट्स" দিয়ে 50/50 লেআউটগুলিই করতে পারে না, তবে দুটির সাথে জড়িত সমস্ত ধরণের লেআউটও রয়েছে।

উদাহরণস্বরূপ, এখানে একটি লেআউট যা প্রস্থকে চারটি সমান অংশে কেটে দেয় (আসলে তিনটি, 1, 1, 2 এর ওজন সহ):

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

    <View
        android:id="@+id/strut"
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:background="#000000" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/strut" >

        <View
            android:id="@+id/left_strut"
            android:layout_width="1dp"
            android:layout_height="match_parent"
            android:layout_toLeftOf="@+id/strut"
            android:layout_centerHorizontal="true"
            android:background="#000000" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignRight="@+id/left_strut"
            android:text="Far Left" />

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_toRightOf="@+id/left_strut"
            android:text="Near Left" />
    </RelativeLayout>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/strut"
            android:layout_alignParentRight="true"
            android:text="Right" />

</RelativeLayout>

1
ভাল চেষ্টা করুন, তবে আপনি লিনিয়ারলআউট সমাধানের চেয়ে জটিলতর কিছু থেকে শেষ করেছেন, যা আমরা এড়াতে চেষ্টা করি। প্রয়োজনটি এক অনন্য আপেক্ষিক বিন্যাসে থাকা সমস্ত দৃষ্টিভঙ্গি থাকা (এটি তাদের মধ্যে আপেক্ষিক প্রতিবন্ধকতাগুলির অনুমতি দেওয়ার জন্য)
ওরাব্যাগ

1
পারফরম্যান্সের জন্য নেস্টেড লেআউটগুলি এড়ানো উচিত। 50/50 বিভাজনের জন্য কেন্দ্রিক দৃষ্টিভঙ্গির সমাধানটি ছিল সরলতার জন্য একটি দুর্দান্ত সমাধান thanks এই সমাধানটি এখন মোটেই সহজ নয়। আমি এটি সুপারিশ করব না।
এইচসিপিএল

3

আপনার দুটি পাঠ্যদর্শনগুলি হোস্ট এবং পোর্টকে একটি স্বতন্ত্র লিনিয়ারলআউট অনুভূমিকভাবে রাখুন এবং অ্যান্ড্রয়েড ব্যবহার করুন: শতাংশ তৈরির জন্য লেআউট_ ওয়েট


1

Https://github.com/mmin18/FlexLayout পরীক্ষা করুন যা আপনি শতাংশ বা জাভা এক্সপ্রেশন সরাসরি লেআউট এক্সএমএলে ব্যবহার করতে পারেন।

<EditText
    app:layout_left="0%"
    app:layout_right="60%"
    app:layout_height="wrap_content"/>
<EditText
    app:layout_left="prev.right+10dp"
    app:layout_right="100%"
    app:layout_height="wrap_content"/>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.