android - কনস্ট্রেন্টলআউট এবং রিলেটিভলআউটের মধ্যে পার্থক্য




android-layout android-relativelayout (8)

@ ধাওয়াল-জিভানি ছাড়াও উত্তর।

আমি প্রকল্প https://github.com/OnlyInAmerica/ConstraintLayoutPerf প্রকল্পটি সীমাবদ্ধ বিন্যাসের v.1.1.0-beta3 এর সর্বশেষ সংস্করণে আপডেট করেছি

অনক্রিট পদ্ধতি এবং সিএনইউ মনিটরে দৃশ্যমান শেষ প্রফর্মড্রো পদ্ধতির কার্যকরকরণের শেষের মধ্যে আমি ওনক্রিয়াট পদ্ধতি এবং সময়কে মাপিয়েছি এবং তুলনা করেছি। সমস্ত পরীক্ষা অ্যান্ড্রয়েড 6.0.1 সহ স্যামসাং এস 5 মিনিতে করা হয়েছিল এখানে ফলাফল:

নতুন করে শুরু (অ্যাপ্লিকেশন প্রবর্তনের পরে প্রথম পর্দা খোলার)

আপেক্ষিক লেআউট

অনক্রিট: 123 মিমি

শেষ প্রিফ্রড ড্রয়ের সময় - অনক্রিট সময়: 311.3 মিমি

বাধা লেআউট

অনক্রিট: 120.3 মিমি

শেষ প্রিফ্রড ড্রয়ের সময় - অনক্রিট সময়: 310 মিমি

তদ্ব্যতীত, আমি এই article থেকে পারফরম্যান্স পরীক্ষাটি পরীক্ষা করেছি, এখানে কোডটি পেয়েছি এবং প্রমাণ করেছি যে লুপের 100 টিরও কম বাধা লেআউটের রূপটি স্ফূর্তিযুক্ত পরিমাপের সময় দ্রুত পরিমাপ করা হয়, পরিমাপ করা হয় এবং সম্পর্কিত লেআউটের সাথে বৈকল্পিকগুলি কার্যকর হয়। এবং অ্যান্ড্রয়েড ৪.৩ সহ স্যামসাং এস 3 এর মতো পুরানো অ্যান্ড্রয়েড ডিভাইসগুলিতে পার্থক্য আরও বড় bigger

একটি উপসংহার হিসাবে আমি article মন্তব্যগুলির সাথে একমত:

পুরানো দর্শনগুলি রিলেটিক্যালয়েআউট বা লিনিয়ারলআউট থেকে স্যুইচ করা কি মূল্যবান?

সর্বদা হিসাবে: এটি নির্ভর করে 🙂

আপনার বর্তমান লেআউট স্তরক্রমের সাথে যদি আপনার পারফরম্যান্স সমস্যা না হয় বা আপনি যেভাবেই বিন্যাসে উল্লেখযোগ্য পরিবর্তন করতে চান না তবে আমি কিছুই রিফ্যাক্টর করব না। যদিও আমি ইদানীং এটি পরিমাপ করেছি না, তবে সর্বশেষ প্রকাশে কোনও পারফরম্যান্সের সমস্যা খুঁজে পাইনি। সুতরাং আমি মনে করি এটি ব্যবহার করা আপনার নিরাপদ হওয়া উচিত। তবে - যেমন আমি বলেছি - কেবল স্থানান্তরের স্বার্থে মাইগ্রেট করবেন না। কেবলমাত্র এটি করুন, যদি এর প্রয়োজন হয় এবং এটি থেকে উপকৃত হন। নতুন লেআউটগুলির জন্য, যদিও আমি প্রায় সবসময় কনস্ট্রেন্টলআউট ব্যবহার করি। এটি আমাদের আগে যা ছিল তার তুলনায় এটি আরও ভাল।

ConstraintLayout এবং RelativeLayout মধ্যে পার্থক্য সম্পর্কে আমি বিভ্রান্ত। কেউ দয়া করে আমাকে তাদের মধ্যে সঠিক পার্থক্য বলতে পারেন?


অ্যান্ড্রয়েড ভিউ অঙ্কন প্রক্রিয়াটিতে 3 টি পর্যায় রয়েছে। ViewGroup প্রসারিত করার সময় আপনি সংশ্লিষ্ট পদ্ধতিগুলি সন্ধান করতে পারেন

  1. পরিমাপ করা
  2. বিন্যাস
  3. আঁকা

Systrace সরঞ্জাম ব্যবহার করে আমরা measure/layout গণনা করতে পারি

সম্পর্কিত লেআউট ব্যবহার করে এমন বিন্যাসের বৈকল্পিকের জন্য সিনস্ট্রাস:

কনস্ট্রেন্টলয়েট ব্যবহার করে এমন বিন্যাসের বৈকল্পিকের জন্য সিনস্ট্রাস:

পারফরম্যান্স পার্থক্য ( OnFrameMetricsAvailableListener ব্যবহার করে যা আপনাকে আপনার অ্যাপ্লিকেশনটির ইউআই রেন্ডারিং সম্পর্কে ফ্রেম-ফ্রেম ফ্রেম টাইমিং তথ্য সংগ্রহ করতে দেয়)

ConstraintLayout রিলেটিভলআউটের তুলনায় measure/layout পর্বে প্রায় 40% ভাল সম্পাদন করে

এবং সর্বশেষে তবে অন্তত নয় একটি ConstraintLayout দায়বদ্ধ ইউআই তৈরির একটি আধুনিক উপায়, এটি ক্রমাগত বিকাশ লাভ করে এবং প্রতিটি প্রকাশে দুর্দান্ত বৈশিষ্ট্য নিয়ে আসে যা জীবনকে আরও সহজ করে তোলে। সর্বশেষতম সীমাবদ্ধ লেআউটটি 1.1

আরও here , here , medium.com/google-developers/…


আপেক্ষিক লেআউট এবং সীমাবদ্ধ বিন্যাস সমতুল্য বৈশিষ্ট্য

(1) আপেক্ষিক লেআউট:

android:layout_centerInParent="true"    

(1) সীমাবদ্ধ বিন্যাস সমতুল্য:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"

(2) আপেক্ষিক লেআউট:

android:layout_centerHorizontal="true"

(2) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintEnd_toEndOf="parent"

(3) আপেক্ষিক লেআউট:

android:layout_centerVertical="true"    

(3) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"

(4) আপেক্ষিক লেআউট:

android:layout_alignParentLeft="true"   

(4) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintLeft_toLeftOf="parent"

(5) আপেক্ষিক লেআউট:

android:layout_alignParentStart="true"

(5) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintStart_toStartOf="parent"

()) আপেক্ষিক লেআউট:

android:layout_alignParentRight="true"

()) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintRight_toRightOf="parent"

(7) আপেক্ষিক লেআউট:

android:layout_alignParentEnd="true"    

(7) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintEnd_toEndOf="parent"

(8) আপেক্ষিক লেআউট:

android:layout_alignParentTop="true"

(8) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintTop_toTopOf="parent"

(9) আপেক্ষিক লেআউট:

android:layout_alignParentBottom="true" 

(9) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintBottom_toBottomOf="parent"

(10) আপেক্ষিক লেআউট:

android:layout_alignStart="@id/view"

(10) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintStart_toStartOf="@id/view"

(11) আপেক্ষিক লেআউট:

android:layout_alignLeft="@id/view" 

(১১) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintLeft_toLeftOf="@id/view"

(12) আপেক্ষিক লেআউট:

android:layout_alignEnd="@id/view"  

(12) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintEnd_toEndOf="@id/view"

(13) আপেক্ষিক লেআউট:

android:layout_alignRight="@id/view"

(13) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintRight_toRightOf="@id/view"

(14) আপেক্ষিক লেআউট:

android:layout_alignTop="@id/view"  

(14) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintTop_toTopOf="@id/view"

(15) আপেক্ষিক লেআউট:

android:layout_alignBaseline="@id/view" 

(15) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintBaseline_toBaselineOf="@id/view"

(16) আপেক্ষিক লেআউট:

android:layout_alignBottom="@id/view"

(16) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintBottom_toBottomOf="@id/view"

(17) আপেক্ষিক লেআউট:

android:layout_toStartOf="@id/view"

(17) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintEnd_toStartOf="@id/view"

(18) আপেক্ষিক লেআউট:

android:layout_toLeftOf="@id/view"  

(18) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintRight_toLeftOf="@id/view"

(19) আপেক্ষিক লেআউট:

android:layout_toEndOf="@id/view"

(19) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintStart_toEndOf="@id/view"

(20) আপেক্ষিক লেআউট:

android:layout_toRightOf="@id/view"

(20) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintLeft_toRightOf="@id/view"

(21) আপেক্ষিক লেআউট:

android:layout_above="@id/view" 

(21) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintBottom_toTopOf="@id/view"

(22) আপেক্ষিক লেআউট:

android:layout_below="@id/view" 

(22) সীমাবদ্ধ লেআউট সমতুল্য:

app:layout_constraintTop_toBottomOf="@id/view"

আমি উপসংহারটি করতে পারি is

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

২) দ্বিতীয়ত এটিতে অন্যান্য লেআউটের তুলনায় ফ্ল্যাট ভিউয়ের স্তরক্রম রয়েছে , তাই আপেক্ষিক বিন্যাসের চেয়ে ভাল পারফরম্যান্স যা আপনি অন্যান্য উত্তর থেকে দেখে থাকতে পারেন

3) এটিতে আপেক্ষিক বিন্যাসের তুলনায় অতিরিক্ত জিনিস রয়েছে যেমন বিজ্ঞপ্তিযুক্ত আপেক্ষিক অবস্থান যেখানে আমরা নির্দিষ্ট ব্যাসার্ধের সাথে এটির সাথে সম্পর্কিত অন্য দৃষ্টিভঙ্গি স্থাপন করতে পারি যা আপেক্ষিক বিন্যাসে করতে পারে না

আমি এটি আবার বলছি, সীমাবদ্ধ লেআউটটি ব্যবহার করে ইউআই ডিজাইন করা আইওএসে ইউআই ডিজাইনের সমান, তাই ভবিষ্যতে আপনি যদি আইওএসে কাজ করেন তবে আপনি যদি সীমাবদ্ধ বিন্যাসটি ব্যবহার করেন তবে এটি আরও সহজ হবে future


একটি বড় পার্থক্য হ'ল কনস্ট্রেন্টলআউট দৃশ্যটি সরে গেলেও প্রতিবন্ধকতাগুলিকে সম্মান করে। সুতরাং আপনার যদি চেইন থাকে তবে এটি বিন্যাসটি ভাঙবে না এবং আপনি একটি দৃশ্যটি মাঝখানে অদৃশ্য করতে চান।


কেবলমাত্র তফাতটি আমি লক্ষ্য করেছি যে ড্রাগগুলি ড্র্যাগ এবং ড্রপের মাধ্যমে আপেক্ষিক বিন্যাসে সেট করা জিনিসগুলির স্বয়ংক্রিয়ভাবে অনুমিত অন্যান্য উপাদানগুলির সাথে তাদের মাত্রাগুলি থাকে, সুতরাং আপনি যখন অ্যাপটি চালাবেন তখন যা পাবেন তা আপনি পাবেন। তবে সীমাবদ্ধ বিন্যাসে এমনকি আপনি যদি নকশার দৃশ্যে কোনও উপাদান টেনে আনেন এবং ছাড়েন, আপনি যখন অ্যাপ্লিকেশনটি চালান তখন জিনিসগুলি চারপাশে স্থানান্তরিত হতে পারে। সীমাবদ্ধতাগুলিকে ম্যানুয়ালি সেট করে বা আরও ঝুঁকিপূর্ণ পদক্ষেপটি উপাদান গাছের উপাদানটিতে ডান ক্লিক করে সীমাবদ্ধকরণ বিন্যাসের সাব মেনুটি নির্বাচন করে, তারপরে 'ইনফারার সীমাবদ্ধতা' ক্লিক করে সহজেই ঠিক করা যায়। আশাকরি এটা সাহায্য করবে


ConstraintLayout উদ্দেশ্য হ'ল বাসা বাঁধতে বাড়াতে প্রতিটি ভিউতে কিছু নিয়ম প্রয়োগ করে আপনার বিন্যাসের ভিউ হায়ারার্কিকে অনুকূলকরণ এবং সমতল করা।

বিধিগুলি আপনাকে রিলেটিভলআউটের স্মরণ করিয়ে দেয়, উদাহরণস্বরূপ অন্য কোনও ভিউয়ের বাম দিকে বাম সেট করা।

app:layout_constraintBottom_toBottomOf="@+id/view1"

রিলেটিভলআউটের বিপরীতে, ConstraintLayout bias মান সরবরাহ করে যা হ্যান্ডলগুলি (বৃত্তের সাথে চিহ্নিত) এর সাথে সম্পর্কিত 0% এবং 100% অনুভূমিক এবং উল্লম্ব অফসেটের ক্ষেত্রে একটি ভিউ অবস্থান করতে ব্যবহৃত হয়। এই শতাংশ (এবং ভগ্নাংশ) বিভিন্ন স্ক্রীন ঘনত্ব এবং আকারগুলি জুড়ে দর্শনবিহীন অবস্থান নির্ধারণ করে।

app:layout_constraintHorizontal_bias="0.33" <!-- from 0.0 to 1.0 -->
app:layout_constraintVertical_bias="0.53" <!-- from 0.0 to 1.0 -->

বেসলাইন হ্যান্ডেল (বৃত্তাকার হ্যান্ডেলের নীচে বৃত্তাকার কোণগুলির সাথে দীর্ঘ পাইপ) অন্য ভিউ রেফারেন্সের সাথে ভিউয়ের সামগ্রীটি সারিবদ্ধ করতে ব্যবহৃত হয়।

স্কোয়ার হ্যান্ডলগুলি (ভিউয়ের প্রতিটি কোণে) ডিপিএসে ভিউটির আকার পরিবর্তন করতে ব্যবহৃত হয়।

এটি সম্পূর্ণ মতামত ভিত্তিক এবং ConstraintLayout আমার ছাপ impression


@ ডেভিডপিবিআর ConstraintLayout পারফরম্যান্স দ্বারা প্রতিবেদন করা

আমি দুটি অনুরূপ 7-শিশু লেআউট তৈরি করেছি, যার প্রত্যেকটি একটি প্যারেন্ট ConstraintLayout এবং RelativeLayout । অ্যান্ড্রয়েড স্টুডিও পদ্ধতির ট্রেসিং সরঞ্জামের উপর ভিত্তি করে এটি প্রদর্শিত হচ্ছে কনস্ট্র্যান্টলয়েট অন-মেজারে বেশি সময় ব্যয় করে এবং ফিনিশআইনফ্লেটে অতিরিক্ত কাজ করে।

ব্যবহৃত লাইব্রেরি ( support-v4 , appcompat-v7 support-v4 appcompat-v7 ...):

com.android.support.constraint:constraint-layout:1.0.0-alpha1

ডিভাইস / অ্যান্ড্রয়েড সংস্করণগুলি এতে পুনরুত্পাদন করা হয়েছে: স্যামসাং গ্যালাক্সি এস 6 (এসএম-জি 920 এ। দুঃখিত, কোনও নেক্সাস এটিএম নেই)। অ্যান্ড্রয়েড 5.0.2

দ্রুত পদ্ধতির ট্রেসিং তুলনা:

নমুনা গিথুব রেপো: https://github.com/OnlyInAmerica/ConstraintLayoutPerf





android-constraintlayout