2012-05-01 12 views
25

मुझे रिलेवेटिवआउट के साथ अनुभव है लेकिन मैंने कभी भी समस्या को हल करने के लिए कभी भी एक रास्ता नहीं चला है (हार्ड कोडिंग मार्जिन मानों के अलावा, जो मैं चाहता हूं । से बचने के लिए)Android RelativeLayout किसी अन्य दृश्य के शीर्ष दाएं कोने पर एक दृश्य के केंद्र को संरेखित करें

मैं एक RelativeLayout में निम्न छवि की तरह कुछ बनाने की कोशिश करना चाहते हैं:

enter image description here

बॉक्स अपनी ही दृश्य है और मैं देखें कि नारंगी चक्र में शामिल करना चाहते हैं उस दृश्य के ऊपरी दाएं कोने पर केंद्रित होना जिसमें नीला बॉक्स शामिल है।

मैंने android:alignTop="boxView" और android:alignRight="boxView" के साथ प्रयास किया लेकिन यह मेरे नारंगी सर्कल को पूरी तरह से मेरे बॉक्स में रख दिया। मैं यह होना चाहता हूं कि सर्कल बॉक्स के ऊपरी दाएं कोने से ऊपर केंद्रित हो।

कोई भी जानता है कि मैं रिश्तेदार लयआउट के साथ यह परिणाम कैसे प्राप्त कर सकता हूं? नारंगी डॉट व्यू के लिए स्क्रीन के किनारे से दूर हार्डकोड मार्जिन के बिना अधिमानतः।

+0

आप इसके लिए मार्जिन का उपयोग क्यों नहीं करना चाहते हैं। मार्जिन इसे पूरा करने के लिए सही तरीका की तरह लगता है। – Bobbake4

+0

मैं केवल स्क्रीन के किनारे से कितना दूर मार्जिन नहीं देना चाहता हूं। अगर मैं इसे बॉक्स में संरेखित कर सकता हूं और उसके बाद इसके व्यास के आधे हिस्से को एक मार्जिन के साथ बदल सकता हूं जो वास्तव में आदर्श होगा। लेकिन मैं केवल यह बता सकता हूं कि स्क्रीन के किनारे से कितना दूर होना है, इसके बजाय मैं उस बिंदु से कितना दूर हूं जिस पर मैं संरेखित करना चाहता हूं। – FoamyGuy

उत्तर

29

यह कोड जो बनाता है वह बनाता है लेकिन मार्जिन का उपयोग करता है। अब आप कोड में मार्जिन सेट कर सकते हैं यदि यह एक गतिशील संरचना है जिसे आप बना रहे हैं। जैसा कि आप देख सकते हैं मैंने ब्लू बॉक्स के बाहर ऊपरी दाएं आकार को स्थानांतरित करने के लिए नकारात्मक मार्जिन का उपयोग किया था। इन सर्कल की आधा ऊंचाई होने की आवश्यकता है जिसे आप स्थानांतरित करने की कोशिश कर रहे हैं। आप ऊपरी दाएं कोने में सर्कल को केंद्र में रखने के लिए कोड में यह सब कर सकते हैं।

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:background="#0000FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="26dp" 
      android:layout_height="26dp" 
      android:layout_alignRight="@+id/linearLayout1" 
      android:layout_alignTop="@+id/linearLayout1" 
      android:layout_marginRight="-13dp" 
      android:layout_marginTop="-13dp" 
      android:background="#FF00FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

    </RelativeLayout> 
+3

नकारात्मक मार्जिन के बारे में नहीं पता था। पूर्ण धन्यवाद। – FoamyGuy

+0

ध्यान दें कि यह वास्तव में काम नहीं करता है अगर दूसरे दृश्य को किसी छवि द्वारा आकार दिया जाता है, क्योंकि ड्रॉबल्स में डीपी में लगातार आकार नहीं होता है (पिक्सल में उनका आकार लगातार एक स्केलिंग के बजाय एक डीपीआई बाल्टी से कूदता है)। तो आप केवल 26 डीपी/2 = 13 डीपी नहीं कर सकते हैं। एक वर्कअराउंड एक आकार चुनना है जो छवि से निश्चित रूप से बड़ा है, और दृश्य के चारों ओर एक रैपर लेआउट जोड़ें (उसमें केंद्रित मूल दृश्य के साथ), तो आप इसका आधा गणना कर सकते हैं। – Karu

+0

नकारात्मक मार्जिन! हाँ! – RexSplode