আমি ConstraintLayout
এবং এর মধ্যে পার্থক্য সম্পর্কে বিভ্রান্ত RelativeLayout
। কেউ দয়া করে আমাকে তাদের মধ্যে সঠিক পার্থক্য বলতে পারেন?
RealtiveLayout
, LinearLayout
, GridLayout
ইত্যাদি) দৃশ্য অনুক্রমের তারা চান জন্য।
আমি ConstraintLayout
এবং এর মধ্যে পার্থক্য সম্পর্কে বিভ্রান্ত RelativeLayout
। কেউ দয়া করে আমাকে তাদের মধ্যে সঠিক পার্থক্য বলতে পারেন?
RealtiveLayout
, LinearLayout
, GridLayout
ইত্যাদি) দৃশ্য অনুক্রমের তারা চান জন্য।
উত্তর:
এর উদ্দেশ্য ConstraintLayout
হ'ল বাসা বাঁধা এড়াতে প্রতিটি ভিউতে কিছু নিয়ম প্রয়োগ করে আপনার বিন্যাসের ভিউ হায়ারার্কিকে অনুকূলকরণ এবং সমতল করা।
বিধিগুলি আপনাকে স্মরণ করিয়ে দেয় RelativeLayout
, উদাহরণস্বরূপ অন্য কিছু ভিউয়ের বাম দিকে বাম সেট করা।
app:layout_constraintBottom_toBottomOf="@+id/view1"
বিপরীতে RelativeLayout
, মানগুলি 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
আপেক্ষিক লেআউট এবং সীমাবদ্ধ বিন্যাস সমতুল্য বৈশিষ্ট্য
(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"
@ ডেভিডপব্রের ConstraintLayout
পারফরম্যান্স দ্বারা রিপোর্ট করা
আমি দুটি অনুরূপ 7-শিশু লেআউট তৈরি করেছি, প্রত্যেকটি একটি পিতামাতার সাথে ConstraintLayout
এবং RelativeLayout
। অ্যান্ড্রয়েড স্টুডিও পদ্ধতি ট্রেসিং সরঞ্জামের উপর ভিত্তি করে, এটি প্রদর্শিত হয় যে এটি ConstraintLayout
onMeasure এ আরও বেশি সময় ব্যয় করে এবং এতে অতিরিক্ত কাজ করে onFinishInflate
।
ব্যবহৃত গ্রন্থাগার ( support-v4
, appcompat-v7
…):
com.android.support.constraint:constraint-layout:1.0.0-alpha1
ডিভাইস / অ্যান্ড্রয়েড সংস্করণগুলি এতে পুনরুত্পাদন করা হয়েছে: স্যামসাং গ্যালাক্সি এস 6 (এসএম-জি 920 এ। দুঃখিত, কোনও নেক্সাস এটিএম নেই)। অ্যান্ড্রয়েড 5.0.2
দ্রুত পদ্ধতির ট্রেসিং তুলনা:
নমুনা গিথুব রেপো: https://github.com/OnlyInAmerica/CrastraintLayoutcreen
নিম্নলিখিত পার্থক্য / সুবিধা:
কনস্ট্রেন্ট লেআউটে উভয় ক্ষেত্রে সম্পর্কিত লেআউটের পাশাপাশি দ্বৈত শক্তি রয়েছে লিনিয়ার লেআউট: মতামতের আপেক্ষিক অবস্থান নির্ধারণ করুন (তুলনামূলক বিন্যাসের মতো) এবং গতিশীল ইউআইয়ের জন্য ওজনও সেট করে (যা কেবল লিনিয়ার লেআউটে সম্ভব ছিল)।
খুব শক্তিশালী ব্যবহার হল চেইন গঠনের মাধ্যমে উপাদানগুলির গোষ্ঠীকরণ। এইভাবে আমরা একদল মতামত গঠন করতে পারি যা পুরোপুরি একটি শ্রেণিবদ্ধের অন্য স্তরটি যুক্ত না করে কেবলমাত্র অন্য গ্রুপের মতামত গঠনের জন্য পছন্দসই উপায়ে স্থাপন করা যেতে পারে।
ওজন ছাড়াও, আমরা অনুভূমিক এবং উল্লম্ব পক্ষপাত প্রয়োগ করতে পারি যা কেন্দ্র থেকে স্থানচ্যুত হওয়ার শতাংশ ছাড়া কিছুই নয়। (0.5 এর পক্ষপাতের অর্থ কেন্দ্রীয়ভাবে প্রান্তিক। কোনও মান কম বা বেশি অর্থ সংশ্লিষ্ট দিকের চলমান আন্দোলন)।
আর একটি খুব গুরুত্বপূর্ণ বৈশিষ্ট্যটি হ'ল এটি GONE ভিউগুলি পরিচালনা করার জন্য কার্যকারিতাটি সম্মান করে এবং সরবরাহ করে যাতে জাভা কোডের মাধ্যমে কিছু ভিউ GONE এ সেট করা থাকলে লেআউটগুলি ভেঙে না যায়। আরও এখানে পাওয়া যাবে: https://developer.android.com/references/android/support/constraint/ConstraintLayout.html# ভিজিবিলিটি আচরণ
ব্লু প্রিন্ট এবং ভিজ্যুয়াল এডিটর সরঞ্জাম ব্যবহার করে স্বয়ংক্রিয় সীমাবদ্ধতার শক্তি সরবরাহ করে যা কোনও পৃষ্ঠা ডিজাইন করা সহজ করে।
এই সমস্ত বৈশিষ্ট্যগুলি ভিউ হায়ারার্কিকে সমতল করার দিকে পরিচালিত করে যা কর্মক্ষমতা উন্নত করে এবং প্রতিক্রিয়াশীল এবং গতিশীল UI তৈরি করতে সহায়তা করে যা আরও সহজেই বিভিন্ন স্ক্রিনের আকার এবং ঘনত্বের সাথে মানিয়ে নিতে পারে।
দ্রুত শিখার জন্য এখানে সেরা স্থান: https://codelabs.developers.google.com/codelabs/constraint-layout/#0
একটি বড় পার্থক্য হ'ল কনস্ট্রেন্টলআউট ভিউ চলে গেলেও প্রতিবন্ধকতাগুলিকে সম্মান করে। সুতরাং আপনার যদি চেইন থাকে তবে এটি বিন্যাসটি ভাঙবে না এবং আপনি একটি দৃশ্যটি মাঝখানে অদৃশ্য করতে চান।
@ ধাওয়াল-জিভানি ছাড়াও উত্তর।
আমি প্রকল্প আপডেট করেছি গিথুব প্রকল্পটি সীমাবদ্ধ বিন্যাসের v.1.1.0-beta3 এর সর্বশেষ সংস্করণে
অনক্রিট পদ্ধতি এবং সিএনইউ মনিটরে দৃশ্যমান শেষ প্রফ্রডড্রো পদ্ধতির কার্যকরকরণের শেষের মধ্যে আমি ওনক্রিয়াট পদ্ধতি এবং সময়কে পরিমাপ করেছি এবং তুলনা করেছি। সমস্ত পরীক্ষা অ্যান্ড্রয়েড 6.0.1 সহ স্যামসাং এস 5 মিনিতে করা হয়েছিল এখানে ফলাফল:
নতুন করে শুরু (অ্যাপ্লিকেশন প্রবর্তনের পরে প্রথম পর্দা খোলার)
আপেক্ষিক লেআউট
অনক্রিট: 123 মিমি
শেষ প্রিফ্রড ড্রয়ের সময় - অনক্রিট সময়: 311.3 মিমি
বাধা লেআউট
অনক্রিট: 120.3 মিমি
শেষ প্রিফ্রড ড্রয়ের সময় - অনক্রিট সময়: 310 মিমি
তদ্ব্যতীত, আমি এই নিবন্ধটি থেকে পারফরম্যান্স পরীক্ষাটি পরীক্ষা করেছি , এখানে কোডটি পেয়েছি এবং প্রমাণ করেছি যে লুপের 100 টিরও কম বাধা লেআউটের বৈকল্পিক দ্রুত স্ফীতকরণ, পরিমাপ এবং লেআউট এবং তারপরে সম্পর্কিত লেআউটের সাথে রূপগুলি কার্যকর করার সময় দ্রুত হয়। এবং পুরানো অ্যান্ড্রয়েড ডিভাইসগুলিতে, অ্যান্ড্রয়েড 4.3 সহ স্যামসাং এস 3 এর মতো পার্থক্য আরও বড়।
একটি উপসংহার হিসাবে আমি নিবন্ধের মন্তব্যগুলির সাথে একমত :
পুরানো দর্শনগুলি রিলেটিক্যালয়েআউট বা লিনিয়ারলআউট থেকে স্যুইচ করা কি মূল্যবান?
সর্বদা হিসাবে: এটি নির্ভর করে 🙂
আপনার বর্তমান লেআউট স্তরক্রমের সাথে যদি আপনার পারফরম্যান্স সমস্যা না হয় বা আপনি যেভাবেই বিন্যাসে উল্লেখযোগ্য পরিবর্তন করতে চান না তবে আমি কিছুই রিফ্যাক্টর করব না। যদিও আমি ইদানীং এটি পরিমাপ করেছি না, তবে সর্বশেষ প্রকাশে কোনও পারফরম্যান্সের সমস্যা খুঁজে পাইনি found সুতরাং আমি মনে করি এটি ব্যবহার করা আপনার নিরাপদ হওয়া উচিত। তবে - যেমনটি আমি বলেছি - কেবল স্থানান্তরের স্বার্থে মাইগ্রেট করবেন না। কেবলমাত্র এটি করুন, যদি এর প্রয়োজন হয় এবং এটি থেকে উপকৃত হন। নতুন লেআউটগুলির জন্য, যদিও আমি প্রায় সবসময় কনস্ট্রেন্টলআউট ব্যবহার করি। এটি আমাদের আগে যা ছিল তার তুলনায় এটি আরও ভাল।
সরকারিভাবে, ConstraintLayout
হয় অনেক দ্রুত
অ্যান্ড্রয়েডের এন রিলিজে,
ConstraintLayout
ক্লাসটি অনুরূপ কার্যকারিতা সরবরাহ করেRelativeLayout
তবে একটি উল্লেখযোগ্যভাবে কম ব্যয়ে।
আসল প্রশ্নটি জিজ্ঞাসা করা হল, সীমাবদ্ধ বিন্যাস ছাড়া অন্য কোনও লেআউট ব্যবহার করার কোনও কারণ আছে কি? আমি বিশ্বাস করি উত্তরটি হতে পারে না।
যাঁরা জিদ করছেন তারা নবাগত প্রোগ্রামার বা তাদের মতো লক্ষ্য রাখেন, তাদের অন্য কোনও বিন্যাসের থেকে নিকৃষ্ট হওয়ার জন্য তাদের কোনও কারণ সরবরাহ করা উচিত।
সীমাবদ্ধতা লেআউটগুলি প্রতিটি উপায়েই আরও ভাল (তারা এপিএকের আকারের 150k এর মতো ব্যয় করে। এগুলি দ্রুত, এগুলি সহজ, তারা আরও নমনীয়, পরিবর্তনের ক্ষেত্রে তারা আরও ভাল প্রতিক্রিয়া দেখায়, আইটেমগুলি চলে যাওয়ার পরে সমস্যাগুলি সমাধান করে, তারা মূলত বিভিন্ন স্ক্রিনের ধরণের সাথে ভালভাবে মিলিত হয় এবং তারা দীর্ঘস্থায়ী নেস্ট লুপ ব্যবহার করে না long সবকিছু জন্য গাছ কাঠামো আঁকা। আপনি যে কোনও স্থানে, যে কোনও জায়গায় শ্রদ্ধার সাথে যে কোনও জায়গায় রাখতে পারেন।
তারা ২০১ 2016 সালের মাঝামাঝি সময়ে কিছুটা চতুর ছিল, যেখানে ভিজ্যুয়াল লেআউট সম্পাদকটি যথেষ্ট ভাল ছিল না, তবে তারা এই বিষয়টিতে পৌঁছেছে যে আপনার যদি কোনও বিন্যাস হয় তবে আপনি এমনকি বাধা লেআউট ব্যবহার করেও গুরুত্ব সহকারে বিবেচনা করতে চাইতে পারেন যখন এটি একটি হিসাবে একই জিনিস আছে RelativeLayout
, অথবা এমনকি একটি সহজ LinearLayout
। FrameLayouts
স্পষ্টভাবে এখনও তাদের উদ্দেশ্য আছে। তবে, আমি এই মুহুর্তে অন্য কিছু নির্মাণ করতে দেখছি না। তারা যদি এটি দিয়ে শুরু করে তবে তারা আর কিছু যুক্ত না করত।
আমি উপসংহারটি করতে পারি is
1) আমরা কোডের এক্সএমএল অংশটি স্পর্শ না করেই ইউআই ডিজাইনটি করতে পারি , সত্যি বলতে আমি গুগল আইওএস অ্যাপ্লিকেশনগুলিতে ইউআই কীভাবে ডিজাইন করা হয়েছে তা অনুলিপি করেছে , আপনি যদি আইওএসে ইউআই বিকাশের সাথে পরিচিত হন তবে তা আপত্তিজনক হবে এক্সএমএল ডিজাইন স্পর্শ না করে সীমাবদ্ধতা সেট করা শক্ত ।
২) দ্বিতীয়ত এটিতে অন্যান্য লেআউটের তুলনায় সমতল দৃশ্যের স্তরক্রম রয়েছে , তাই আপেক্ষিক বিন্যাসের চেয়ে ভাল পারফরম্যান্স যা আপনি অন্যান্য উত্তর থেকে দেখে থাকতে পারেন
3) এটিতে আপেক্ষিক বিন্যাসের তুলনায় অতিরিক্ত জিনিস রয়েছে যেমন বিজ্ঞপ্তিযুক্ত আপেক্ষিক অবস্থান যেখানে আমরা নির্দিষ্ট ব্যাসার্ধের সাথে এটির সাথে সম্পর্কিত একটি অন্য দৃষ্টিভঙ্গি নির্দিষ্ট কোণে করতে পারি যা আপেক্ষিক বিন্যাসে করতে পারে না
আমি এটি আবার বলছি, সীমাবদ্ধ লেআউটটি ব্যবহার করে ইউআই ডিজাইন করা আইওএসে ইউআই ডিজাইনের সমান, তাই ভবিষ্যতে আপনি যদি আইওএসে কাজ করেন তবে আপনি যদি সীমাবদ্ধ বিন্যাসটি ব্যবহার করেন তবে এটি আরও সহজ হবে future
কেবলমাত্র তফাতটি আমি লক্ষ্য করেছি যে ড্রাগগুলি ড্র্যাগ এবং ড্রপের মাধ্যমে আপেক্ষিক বিন্যাসে সেট করা জিনিসগুলির স্বয়ংক্রিয়ভাবে অনুমিত অন্যান্য উপাদানগুলির সাথে তাদের মাত্রাগুলি থাকে, সুতরাং আপনি যখন অ্যাপটি চালাবেন তখন যা পাবেন তা আপনি পাবেন। তবে সীমাবদ্ধ বিন্যাসে এমনকি আপনি যদি নকশার দৃশ্যে কোনও উপাদান টেনে আনেন এবং ছাড়েন, আপনি যখন অ্যাপটি চালাবেন তখন জিনিসগুলি চারপাশে স্থানান্তরিত হতে পারে। সীমাবদ্ধতাগুলিকে ম্যানুয়ালি সেট করে বা আরও ঝুঁকিপূর্ণ পদক্ষেপটি উপাদান গাছের উপাদানটিতে ডান ক্লিক করে সীমাবদ্ধকরণ বিন্যাসের সাব মেনুটি নির্বাচন করে, তারপরে 'ইনফারার সীমাবদ্ধতা' ক্লিক করে সহজেই ঠিক করা যায়। আশাকরি এটা সাহায্য করবে