android सकल बाधा लेआउट पर ओवरलैप/नकारात्मक मार्जिन कैसे प्राप्त करें?




सकल लाभ क्या है (6)

क्या ओवरलैप प्राप्त करने के लिए बाधा लेआउट पर नकारात्मक मार्जिन प्राप्त करना संभव है? मैं एक छवि को लेआउट पर केंद्रित करने की कोशिश कर रहा हूं और एक पाठ दृश्य ऐसा है कि यह एक्स डीपी द्वारा ओवरलैप करता है। मैंने नकारात्मक मार्जिन मान सेट करने की कोशिश की लेकिन कोई भाग्य नहीं। इसे हासिल करने का एक तरीका है तो बहुत अच्छा होगा।


यद्यपि यह प्रकट नहीं होता है कि कांस्ट्रेन्थ लयआउट में नकारात्मक मार्जिन का समर्थन किया जाएगा, लेकिन उपलब्ध और समर्थित उपकरणों का उपयोग करके प्रभाव को पूरा करने का एक तरीका है। यहां एक छवि है जहां छवि शीर्षक छवि के नीचे से 22dp ओवरलैप किया गया है - प्रभावी रूप से -22dp मार्जिन:

यह एक Space विजेट का उपयोग करके एक निपुण मार्जिन के साथ पूरा किया गया था जो आप चाहते हैं कि ऑफसेट के बराबर है। Space विजेट के बाद ImageView के निचले हिस्से में इसकी कमी आ गई है। अब आपको बस इतना करना है कि TextView विजेट के शीर्ष को छवि शीर्षक के साथ Space विजेट के निचले भाग में कसना है। TextView दृश्य को उस Space के नीचे स्थित किया जाएगा जो सेट किए गए मार्जिन को अनदेखा कर रहा है।

निम्नलिखित एक्सएमएल है जो इस प्रभाव को पूरा करता है। मैं ध्यान दूंगा कि मैं Space उपयोग करता हूं क्योंकि यह इस प्रकार के उपयोग के लिए हल्का और इरादा है, लेकिन मैं दूसरे प्रकार के View का उपयोग कर सकता था और इसे अदृश्य बना सकता था। (आपको शायद समायोजन करने की आवश्यकता होगी, हालांकि।) आप शून्य मार्जिन के साथ एक View भी परिभाषित कर सकते हैं और इनसेट मार्जिन की ऊंचाई जो आप चाहते हैं, और इनसेट View के शीर्ष पर TextView के शीर्ष को कसना।

फिर भी एक अन्य दृष्टिकोण सबसे ऊपर / बॉटम्स / लेफ्ट्स / राइट को संरेखित करके TextView शीर्ष पर TextView को ओवरले करना और मार्जिन / पैडिंग के लिए उपयुक्त समायोजन करना होगा। नीचे प्रदर्शित दृष्टिकोण का लाभ यह है कि बहुत अधिक गणना के बिना एक नकारात्मक मार्जिन बनाया जा सकता है। यह सब कहना है कि इसके लिए कई तरीके हैं।

अपडेट: इस तकनीक की त्वरित चर्चा और डेमो के लिए, Google डेवलपर्स मीडियम ब्लॉग पोस्ट देखें

ConstraintLayout एक्सएमएल के लिए नकारात्मक मार्जिन

<?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">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@mipmap/ic_launcher" />

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

    <TextView
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Say my name"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/marginSpacer" />

</android.support.constraint.ConstraintLayout>

एक सरल तरीका।

मुझे यकीन नहीं है कि सबसे अच्छा तरीका है।

बस LinearLayout का उपयोग कर लपेटें

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
 <View
 android:layout_width="wrap_content"
 android:layout_marginLeft="-20dp"
 android:layout_height="wrap_content"/>
</LinearLayout>

RelativeLayout में नकारात्मक मार्जिन का कभी आधिकारिक समर्थन नहीं किया गया। कांस्ट्रेलेन लयआउट में नकारात्मक मार्जिन का समर्थन नहीं किया जाएगा। [...]

- रोमेन गाइ 8 जून 2016 को

इन दो मुद्दों का पालन करें:

https://code.google.com/p/android/issues/detail?id=212499 https://code.google.com/p/android/issues/detail?id=234866


मुझे इसे बहुत सरल करने का एक तरीका मिला।

मूल रूप से ImageView है, तो पाठ दृश्य पर छवि के शीर्ष बाधा से मिलान करने के लिए शीर्ष बाधा जोड़ें और -ve मार्जिन प्रकार के व्यवहार को प्राप्त करने के लिए TextView के मार्जिन शीर्ष को मैच के लिए जोड़ें।


यह वह है जो मैंने हल खोजने के घंटों के बाद पता लगाया।

आइए हम दो छवियों, छवि 1 और छवि 2 पर विचार करें। Image2 को नीचे दाईं ओर स्थित image1 के शीर्ष पर रखा जाना है।

ओवरलैपिंग दृश्य उदाहरण

ओवरलैपिंग दृश्यों के लिए हम स्पेस विजेट का उपयोग कर सकते हैं।

क्रमशः छवि 1 के चार पक्षों के साथ अंतरिक्ष विजेट के चार पक्षों को कसना। इस उदाहरण के लिए, अंतरिक्ष विजेट के दाईं ओर के साथ छवि 2 के बाईं ओर और अंतरिक्ष विजेट के नीचे की ओर के साथ छवि 2 के ऊपर की ओर बाधा। यह इमेज विजेट को स्पेस विजेट के साथ टाई करेगा और चूंकि स्पेस विजेट को सभी तरफ से विवश किया गया है, हम आवश्यक क्षैतिज या ऊर्ध्वाधर पूर्वाग्रह को परिभाषित कर सकते हैं जो आवश्यकतानुसार इमेज 2 को स्थानांतरित करेगा।

<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Player">
 <ImageView
     android:id="@+id/image1"
     android:layout_width="250dp"
     android:layout_height="167dp"
     android:src="@android:color/holo_green_dark"
     app:layout_constraintEnd_toEndOf="parent"
     app:layout_constraintStart_toStartOf="parent"
     app:layout_constraintTop_toTopOf="parent" />
 <Space
     android:id="@+id/space"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     app:layout_constraintBottom_toBottomOf="@+id/image1"
     app:layout_constraintEnd_toEndOf="@+id/image1"
     app:layout_constraintHorizontal_bias="0.82"
     app:layout_constraintStart_toStartOf="@+id/image1"
     app:layout_constraintTop_toTopOf="@+id/image1"
     app:layout_constraintVertical_bias="0.62" />
 <ImageView
     android:id="@+id/image2"
     android:layout_width="82dp"
     android:layout_height="108dp"
     android:src="@android:color/holo_green_light"
     app:layout_constraintStart_toEndOf="@+id/space"
     app:layout_constraintTop_toBottomOf="@+id/space" />
 </android.support.constraint.ConstraintLayout>

इसके अतिरिक्त, इमेज 1 के केंद्र-तल पर इमेज 2 की स्थिति के लिए, हम इमेज 2 के बाएं और दाएं पक्षों को क्रमशः स्पेस विजेट के बाएं और दाएं पक्षों के साथ कस सकते हैं। इसी प्रकार, हम image2 को Space विजेट के साथ image2 की बाधाओं को बदलकर कहीं भी रख सकते हैं।


एक अन्य तरीका इस तरह से translationX या translationY का उपयोग कर रहा है:

  <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" 
                android:translationX="25dp"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"/>

यह android:layout_marginRight="-25dp" तरह काम करेगा android:layout_marginRight="-25dp"







constraint-layout-chains