অ্যান্ড্রয়েডে নেতিবাচক মার্জিন ব্যবহার করা কি খারাপ অভ্যাস?


114

নেতিবাচক মার্জিনের ডেমো:

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

দৃশ্যপট

ওভারল্যাপিং দর্শনগুলির মধ্যে একটিতে নেতিবাচক মার্জিন সেট করে যাতে এটি অন্য দর্শনের সীমানা বাক্সে আক্রমণ করে।

থটস

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

আমি এও সচেতন যে এপিআই 21 যেহেতু আমরা ভিউটিকে অন্য মতামতের উপরে বা নীচে উপস্থিত করার জন্য বৈশিষ্ট্যগুলি translationZএবং elevationবৈশিষ্ট্যগুলি সেট করতে পারি তবে আমার উদ্বেগটি মূলত এই বৈশিষ্ট্য থেকে আসে যে বৈশিষ্ট্যগুলির নথিতেlayout_margin এটি স্পষ্টভাবে নির্দিষ্ট করে যে মার্জিন মানগুলি ইতিবাচক হওয়া উচিত , আসুন আমার উদ্ধৃতি:

সংক্ষিপ্তসার: এই দর্শনটির
বাম, উপরে, ডান এবং নীচের দিকে অতিরিক্ত স্থান সুনির্দিষ্ট করে। এই স্থানটি এই দৃষ্টির সীমার বাইরে। প্রান্তিক মানগুলি ধনাত্মক হওয়া উচিত । একটি মাত্রিক মান হওয়া আবশ্যক, যা "14.5sp" এর মতো একটি ইউনিটের সাথে সংযুক্ত একটি ভাসমান পয়েন্ট নম্বর। উপলব্ধ ইউনিটগুলি হ'ল: পিক্স (পিক্সেল), ডিপি (ঘনত্ব-স্বাধীন পিক্সেল), এসপি (পছন্দসই ফন্টের আকারের উপর ভিত্তি করে স্কেল করা পিক্সেল), (ইঞ্চি), মিমি (মিলিমিটার) ...

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


1
আমি জানি যে এস্প্রেসো পরীক্ষাগুলি যদি এর কোনও একটি মার্জিন নেতিবাচক হয় তবে অবজেক্টটি দেখতে সক্ষম হবেন ... সুতরাং সেগুলি ব্যবহার না করার কারণ নির্ধারণ করে
টিম বোল্যান্ড

উত্তর:


192

২০১০ সালে, @ রোমেনগুই (মূল অ্যান্ড্রয়েড ইঞ্জিনিয়ার) বলেছেন যে নেতিবাচক মার্জিনগুলির অনির্দিষ্ট আচরণ ছিল

২০১১ সালে, @ রোমেনগুই বিবৃত করেছেন যে আপনি LinearLayoutএবং এ থেকে নেতিবাচক মার্জিন ব্যবহার করতে পারেনRelativeLayout

২০১ In-এ, @ রোমেনগুই জানিয়েছেন যে তারা কখনও আনুষ্ঠানিকভাবে সমর্থিত হয়নি এবং তাদের দ্বারা সমর্থিত হবে নাConstraintLayout

যদিও এই সীমাবদ্ধতাটি ঘিরে কাজ করা সহজ।

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


1
তখন কারও কাছে অন্য কিছু অন্তর্দৃষ্টি রয়েছে সে ক্ষেত্রে উন্মুক্ত রেখে তা তখন একটি ক্ষতিকারক জিনিস বলে মনে হচ্ছে
হুয়ান কর্টেস

1
@ ড্র্রুলেউর: আমি এই ধারণাটি গ্রহণ করব না। নেতিবাচক প্যাডিংয়ের অর্থ কী হবে তা আমার কোনও ধারণা নেই।
কমন্সওয়্যার

1
@ কমন্সওয়্যার আপনি কি আমাকে বলতে পারেন, it - @ মাত্রা / যেকোন মূল্য "এর মতো কিছু করা সম্ভব? আমি কল ঘোষিত মান
চেয়েছি

2
@ 100 কেজি: দুঃখিত, তবে এটি সমর্থিত নয়।
কমন্সওয়্যার

21
আমি লক্ষ্য করেছি যে অ্যান্ড্রয়েড ৪.৪ কিটকাট-এ নেতিবাচক মার্জিনের সাথে কিছু পরিবর্তন হয়েছে (৪.৩ এর তুলনায়; কমপক্ষে আসুস নেক্সাস on-এ)। আপনার প্রয়োজন android:clipChildren="false"এবং android:clipToPadding="false"আপনি আগে যেখানে করেন নি বা জিনিসগুলি এভাবে ভেঙে যায়
জোনিক

18

আশা করি এটি কারও সাহায্য করবে। এখানে ConstraintLayout@ কমন্সওয়্যারের উত্তরের উপর ভিত্তি করে নমুনা কোড ব্যবহার করা হচ্ছে:

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

কোডের উদাহরণ:

<TextView
    android:id="@+id/below"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#F1B36D"
    android:padding="30dp"
    android:text="I'm below"
    android:textColor="#ffffff"
    android:textSize="48sp"
    android:textAlignment="center"
    tools:layout_editor_absoluteX="129dp"
    tools:layout_editor_absoluteY="0dp" />

<android.support.v4.widget.Space
    android:id="@+id/space"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_marginBottom="32dp"
    app:layout_constraintBottom_toBottomOf="@+id/below"
    app:layout_constraintLeft_toLeftOf="@id/below"
    app:layout_constraintRight_toRightOf="@id/below" />

<TextView
    android:id="@+id/top"
    android:layout_width="100dp"
    android:layout_height="60dp"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:text="I'M ON TOP!"
    android:background="#676563"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/space" />

আউটপুট:

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


16

আপনি যদি নেতিবাচক মার্জিন ব্যবহার করতে চান তবে ধারক এবং তার ক্লিপ টোপ্যাডিংয়ের জন্য যথেষ্ট প্যাডিং সেট করুন এবং এটি বাচ্চাদের জন্য নেতিবাচক মার্জিন সেট করুন যাতে এটি সন্তানের দৃশ্যের চিত্রটি ক্লিপ না করে!


4

এটি অতীতে খারাপ অভ্যাস হতে পারে তবে মেটেরিয়াল ডিজাইন এবং এর ভাসমান অ্যাকশন বোতামগুলির সাহায্যে এটি এখন অনেক ক্ষেত্রে অনিবার্য এবং প্রয়োজনীয় বলে মনে হয়। মূলত, যখন আপনার দুটি পৃথক বিন্যাস থাকে যা আপনি একটি একক সম্পর্কিত ay নেতিবাচক মার্জিন ব্যবহার করে বিন্যাস। এবং এটি ক্লিকযোগ্য অঞ্চলে অতিরিক্ত সমস্যা তৈরি করে।


3

আমার জন্য, এবং একটি টেক্সটভিউতে নেতিবাচক মার্জিন নির্ধারণের বিষয়ে (আমি বুঝতে পারি যে ওপি একটি ভিউগ্রুপকে উল্লেখ করছে, তবে আমি নেতিবাচক মার্জিন সেট করার ক্ষেত্রে সমস্যাগুলি খুঁজছিলাম এবং আমি এখানে অবতরণ করেছি) ... আমি 4.0.3 এর সাথে একটি সমস্যা পেয়েছি ( এপিআই 15) কেবল সেটিং android:layout_marginTopবাandroid:layout_marginBottom -2 ডিপি হিসাবে নেতিবাচক মানের ।

কিছু কারণে টেক্সটভিউ মোটেও প্রদর্শন করে না। এটি ভিউ থেকে "চলে গেছে" বলে মনে হচ্ছে (কেবল অদৃশ্য নয়)।

আমি যখন লেআউট_মার্জিনের অন্যান্য 3 সংস্করণ দিয়ে এটি চেষ্টা করেছি তখন আমি সমস্যাটি দেখিনি।

মনে রাখবেন যে আমি এটি বাস্তব ডিভাইসে চেষ্টা করে দেখিনি, এটি একটি 4.0.3 এমুলেটর ব্যবহার করছে। এটি আমি ২ য় অদ্ভুত জিনিসটি পেয়েছি যা কেবলমাত্র 4.0.3 এ প্রভাবিত হয়েছিল, তাই আমার নতুন নিয়মটি সর্বদা একটি 4.0.3 এমুলেটর দিয়ে পরীক্ষা করা :)

টেক্সটভিউয়ের নীচের প্রান্তটি হ্রাস করার ক্ষেত্রে আমার সাফল্য রয়েছে android:lineSpacingExtra="-2dp"যা ব্যবহারের পরেও যা কাজ করে android:singleLine="true"(এবং তাই আমি ভাবিনি যে লাইন ব্যবধানটি একটি ফ্যাক্টর হবে)।


1
আমি একটি নেক্সাস 4 (যা এক্সএইচডিপিআই) এবং 4.2.2 তে একইরকম আচরণ পেয়েছি। কোনও প্যাডিংবিহীন একটি বিন্যাস ছিল, যদিও পিতামাতার বিন্যাসে প্যাডিং ছিল। নেতিবাচক মার্জিনটপ সহ ভিতরে একটি পাঠ্যদর্শন ছিল। 5.0 এ এটি দুর্দান্ত কাজ করেছে। উভয় ডিভাইসে 4.2.2 এ এবং নেক্সাস 4 এর এমুলেটরটিতে এটি অদৃশ্য হয়ে যায়। সমাধানটি প্যাডিং ভিউ থাকা লেআউটে প্যাডিং সরানো ছিল।
louielouie

3

না, আপনার ব্যবহার করা উচিত নয় negative margin। পরিবর্তে আপনার ব্যবহার করা উচিত translate। এমনকি যদি নেতিবাচক মার্জিন কিছু সময় কাজ করে, আপনি যখন কর্মসূচীরূপে লেআউট পরিবর্তন করেন, অনুবাদ সাহায্য করবে। এবং আপনি মার্জিন ব্যবহার করেন এমন স্ক্রিনটি ওভারফ্লো করতে পারে না।


0

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

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