Android ConstraintLayout - एक दृश्य को दूसरे दृश्य के शीर्ष पर रखें


110

मैं एक के ProgressBarशीर्ष पर जोड़ने की कोशिश कर रहा हूँ Button(दोनों अंदर हैं ConstraintLayout)।

<Button
    android:id="@+id/sign_in_button"
    android:layout_width="280dp"
    android:layout_height="75dp"
    android:layout_marginBottom="75dp"
    android:layout_marginTop="50dp"
    android:text="@string/sign_in"
    android:textColor="@color/white"
    android:textSize="22sp"
    android:textStyle="bold"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/passwordEditText"
    app:layout_constraintVertical_bias="0.0"/>

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintTop_toTopOf="@+id/sign_in_button"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toBottomOf="@+id/sign_in_button"
    android:layout_marginBottom="8dp"
    app:layout_constraintVertical_bias="0.5"
    android:layout_marginLeft="8dp"
    app:layout_constraintLeft_toLeftOf="@+id/sign_in_button"
    android:layout_marginRight="8dp"
    app:layout_constraintRight_toRightOf="@+id/sign_in_button"/>

लेकिन फिर भी बुला के बाद bringToFrontपर ProgressBarमें onCreate, यह हमेशा के पीछे रहता है Button

ProgressBar progressBar = (ProgressBar)findViewById(R.id.progressBar);
progressBar.bringToFront();

यह बहुत अजीब है, मैंने आपके लेआउट के साथ थोड़ा सा खेलने की कोशिश की, यहां तक ​​कि चेन को इंवर्ट भी किया ताकि प्रगति बार संपादित पाठ और बटन को प्रगति पट्टी के लिए बाधा बने लेकिन बटन हमेशा प्रगति पट्टी के शीर्ष पर लगता है
लैलोमैन

क्या आप एक फ़्रेमलेआउट का उपयोग करने में सक्षम हैं इसे आज़माएं, यह जानते हुए कि फ्रेमलैटआउट में, z- इंडेक्स लेआउट के अंदर ऑर्डर द्वारा दिया गया है (इसलिए बटन 1, प्रगति 2)
razgraf

जहाँ आपके passwordEditText है के रूप में मैं अनुप्रयोग के बिना जाँच: layout_constraintTop_toBottomOf = "@ + id / passwordEditText" मैं शीर्ष पर प्रगति बार देख सकते हैं यू प्रदान कर सकते हैं कि passwordEditText
पवन

जवाबों:


168

पर एक ऊंचाई सेट करें ProgressBar; 2dpकाम करने लगता है।

android:elevation="2dp"

आप translationZएक समान प्रश्न के स्वीकृत उत्तर में सुझाए अनुसार सेटिंग करने का भी प्रयास कर सकते हैं ।

मैं एक विकल्प के रूप में इस उत्तर पर भी आया था ।


17
लेकिन elevationऔर translationZकेवल एपीआई> = 21 के लिए हैं, पुराने एपीआई के बारे में क्या?
q126y

1
@ q126y मुझे नहीं लगता कि यह एपीआई 21 तक एक मुद्दा बन गया है, इसलिए पुराने एपीआई को इसकी आवश्यकता नहीं होनी चाहिए। मैंने एपीआई 17 पर चलने वाले एमुलेटर पर इसे आज़माया है और प्रगति पट्टी उम्मीद के मुताबिक शीर्ष पर दिखाई दी।
Cheticamp

@ चिटकल तो इसे कैसे संभालना है? एएस एक चेतावनी दे रहा है यह केवल एपीआई स्तर 21 और उच्चतर काम करता है।
अजय एस

6
@ q126yViewCompat.setTranslationZ(view, 5)
सिल्विया एच

2
ViewCompat.setElavation(view, 20f)आपकी मदद करता है
sagus_helgy

10

हमें इसे नियंत्रित करने के लिए android: ऊँचाई का उपयोग करने की आवश्यकता है।

android:elevation="10dp"

यह उन्नयन विशेषता केवल एपीआई स्तर> = 21 में काम करती है। लेकिन इसके नीचे यह सामान्य रूप से व्यवहार करेगी। यदि हम बटन दृश्य के नीचे प्रगति जोड़ते हैं, तो वह दृश्य वह दिखाता है जो अन्य दृश्य के शीर्ष पर नीचे है।


6

ज्यादातर मामलों में, आप बस उस दृश्य को परिभाषित कर सकते हैं जिसे आप शीर्ष पर चाहते हैं, जो उसके नीचे दिखाई दे।


आप यह कैसे सुनिश्चित करते हैं कि coz xml गलती से पुनर्व्यवस्थित हो सकता है
RamPrasadBismil

@ क्रिसन, एक कोड स्निपेट या एक उदाहरण प्रदान करना बेहतर है। धन्यवाद
blueware

1
मुझे आश्चर्य है कि प्रश्न के बाद भी परिभाषित होने के बावजूद यह ProgressBarशीर्ष पर क्यों नहीं है । ButtonProgressBarButton
माइकल ओस्फोस्की

मुझे लगा कि यह भी सच है, लेकिन कोई फर्क नहीं पड़ता कि मैं एक लेआउट को ऑर्डर करने के क्रम में रखता हूं, यह हमेशा एक बटन के पीछे दिखाई दे रहा है
behelit

1

बाधा लेआउट में आपको उपयोग करना चाहिए

traslationz

उस दृश्य से अधिक जिसे आप नीचे करना चाहते हैं।


0

Android Sutdio 3.5 के लिए अद्यतित उत्तर:

अपडेटेड लेआउट एडिटर में अब यह चुनना बहुत आसान है कि कौन सा व्यू सामने होगा जैसा कि एंड्रॉइड स्टूडियो रिलीज़ नोट्स में दिखाया गया है

.. इसके अलावा, एक नीला ओवरले अब बाधा के लक्ष्य को उजागर करता है। किसी अन्य के साथ ओवरलैप होने वाले घटक पर दबाव बनाने का प्रयास करते समय यह हाइलाइटिंग विशेष रूप से उपयोगी है।

https://developer.android.com/studio/releases

और भी आसान, अगर आप व्यू को कॉपी करते हैं (कॉपी पेस्ट या लेआउट एडिटर में कंपोनेंट ट्री से) तो इसे कम प्राथमिकता मिलेगी (इसलिए यह अन्य विचारों के पीछे होगा)


0

आप इसे नीचे की तरह लपेट कर उपयोग कर सकते हैं, तामचीनी का उपयोग माता-पिता के रूप में करें और बाधा लेआउट के बाहर पोरोज्रेस बार डालें। यह बटन ओवरलैप करेगा

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 //your all view inside it with button
 <Button/>......
  .........
 </androidx.constraintlayout.widget.ConstraintLayout>

 <ProgressBar
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

</FrameLayout>

0

डिफ़ॉल्ट रूप से बटन में ट्रांसलेट सेट है, इसलिए आपके पास दो विकल्प हैं

1 - प्रगति बार TranslZ बटन ऊंचाई से अधिक है

ViewCompat.setTranslationZ(progressBar, 5)// to support older api <21

2 - बटन ट्रांसलेट करेंZZZ 0 से ताकि दृश्य एक दूसरे के ऊपर दिखाई दें अपने क्रम लेआउट में, आप बटन को सेट करके इसे प्राप्त कर सकते हैं

style="@style/Widget.AppCompat.Button.Borderless"

0

यद्यपि android:elevation="4dp"या traslationzकाम करेगा, लेकिन इसके लिए एपीआई स्तर कम से कम 21 होना चाहिए। यदि किसी कारण से आप ऐसा नहीं कर सकते हैं, तो सुनिश्चित करें कि आप जिस दृश्य को शीर्ष पर चाहते हैं वह अन्य विचारों के बाद उल्लेख किया गया है। उदाहरण के लिए, अगर मैं ImageB के शीर्ष पर प्रगतिबेर चाहता हूं:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".ImageActivity">

<ImageView
   android:id="@+id/image_view"
   android:layout_width="0dp"
   android:layout_height="0dp"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintDimensionRatio="6:4"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toTopOf="parent" />

<ProgressBar
   android:id="@+id/progress_bar"
   style="?android:attr/progressBarStyle"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.