2011-12-17 10 views
33

मेरे पास एक सापेक्ष लयआउट है जिसमें साइड-बाय-साइड बटन की एक जोड़ी है, जिसे मैं लेआउट के भीतर केंद्रित करना चाहता हूं। मैं बटन को लाइनरलायआउट और केंद्र में रख सकता हूं कि रिलेवेटिवआउट में, लेकिन मैं अपने एक्सएमएल को यथासंभव स्वच्छ रखना चाहता हूं।रिलेवेटिवआउट में एक कंटेनर में रखे बिना कई आइटम केंद्र?

यहाँ मैं क्या करने की कोशिश की है, यह सिर्फ केंद्र में "लागू करें" बटन डालता है और "पूर्ववत करें" यह के बाईं ओर बटन:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="15sp"> 
    <TextView 
    android:id="@+id/instructions" 
    android:text="@string/instructions" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="15sp" 
    android:layout_centerHorizontal="true" 
    /> 
    <Button 
    android:id="@+id/apply" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="@string/apply" 
    android:textSize="20sp" 
    android:layout_below="@id/instructions" 
    /> 
    <Button 
    android:id="@+id/undo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="@string/undo" 
    android:textSize="20sp" 
    android:layout_toLeftOf="@id/apply" 
    android:layout_below="@id/instructions" 
    /> 
</RelativeLayout> 

उत्तर

57

android:gravityview या layout के अंदर सामग्री को संरेखित करेगा।

android:layout_gravityview या layout को उनके माता-पिता के अंदर संरेखित करेगा।

तो

android:gravity="center" 
अपने RelativeLayout चाल करना चाहिए करने के लिए

जोड़ने ...

इस तरह

:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_marginTop="15sp"> 

</RelativeLayout> 
+0

क्या आप उदाहरण लेआउट दे सकते हैं? मैं नहीं देखता कि यह कैसे काम कर सकता है क्योंकि आपको दूसरे के बाईं ओर एक बटन और दूसरी तरफ एक बटन रखना है, जो एक गोलाकार निर्भरता है। जो एक रिलेवेटिवआउट में एक IllegalStateException फेंकता है। –

+0

खुद का परीक्षण किया गया ... बस प्रश्न में कोड का उपयोग करें और मैंने कहा जैसे लाइन जोड़ें ... – BrainCrash

+0

ओह, मैं देखता हूं, मैंने "रिलेवेटिवआउट में केंद्र" को लंबवत और क्षैतिज दोनों के रूप में मिसिनरेट किया - जैसा कि टेक्स्टव्यू के नीचे केंद्र क्षैतिज के विपरीत है। यह तब समझ में आता है। –

2

LinearLayout एक अच्छा विकल्प है। इसके अलावा ऐसे विकल्प हैं जैसे अदृश्य दृश्य और केंद्र बनाना और फिर बाईं ओर बाएं बटन को संरेखित करें और दाईं ओर दाईं ओर। लेकिन वे सिर्फ चारों ओर काम कर रहे हैं।

+0

हां, यह एक बदसूरत कामकाज है, लेकिन यह मुझे सबसे अच्छा मिला है। या तो उस स्पेसर व्यू को बनाएं, या एक युक्त रिलेटिवलाउट/लीनियरलाउट बनाएं - तो किसी भी तरह से एक और दृश्य को फुलाए जाने की आवश्यकता है, लेकिन यह नेस्टेड व्यू ग्रुप होने के ऊपरी हिस्से से बचाता है। –

+0

@havexz डाउनवोट के लिए खेद है, क्योंकि वास्तव में मुझे आवश्यक केंद्र प्राप्त करने के लिए एक अलग लेआउट शामिल किया गया था। मैं आपके उत्तर को छोड़ने के लिए बहुत जल्दबाजी कर रहा था/सी यह ब्रायनक्रैश के जवाब द्वारा हल की गई "स्पष्ट रूप से" विशिष्ट समस्या थी। हालांकि जब मैंने उस समाधान को थोड़ा आगे बढ़ाया तो यह पर्याप्त नहीं था। यह मुझे या तो पूर्ववत या ऊपर नहीं जाने देगा? – samosaris

+0

@SamusArin एक वोट पूर्ववत करने के लिए, फिर से वोट आइकन पर क्लिक करें। – mindriot

5
android:layout_gravity="center" 

लगभग जो भी आप ढूंढ रहे हैं उसे देंगे।

+0

ओएमजी, आपने ब्रायनक्रैश के समान ही जवाब दिया। मैंने बी/सी को गिरा दिया मैंने सोचा कि आपने उसका जवाब कॉपी किया है। क्षमा करें आदमी (मैं डाउनवोट को ठीक करने की कोशिश करूंगा)! – samosaris

+0

ठीक है, सब बेहतर (जीन के संपादन के लिए धन्यवाद)। – samosaris

4

यहाँ कि मेरी विशिष्ट स्थिति हल ऊपर जवाब का का एक संयोजन है :

एक लेआउट के भीतर दो अलग-अलग लेबलों को केंद्रित करना जिसमें एक भी शामिल है बाईं ओर दाईं ओर बटन (बटन, लेबल, लेबल, बाएं से दाएं, जहां लेबल्स लेआउट के सापेक्ष केंद्रित होते हैं, जिसमें तीन तीन दृश्य होते हैं - यानी, बटन लेबल को केंद्र से धक्का नहीं देता है) ।

मैंने इसे दो रिलेवेटिवआउट के घोंसले से हल किया, जहां बाहरी अधिकांश लेआउट में बटन और एक आंतरिक-संबंधित लयआउट शामिल था।

इनर-रिलेटिवलाउट में दो टेक्स्ट लेबल्स (टेक्स्ट व्यू) शामिल थे।

यहाँ एक टुकड़ा है कि कैसे केंद्रित और अन्य लेआउट सामान किया गया था के विवरण प्रदान करता है:

देखें: RelativeLayout Gravity not applied? और Gravity and layout_gravity on Android अंतर के गुरुत्वाकर्षण और layout_gravity के बीच के लिए।

btn_button1 बटन पर पैडिंग लेफ्ट को ट्वीक करें यह देखने के लिए कि टेक्स्ट व्यू नहीं चलता है।

(डाउनवॉट्स के लिए हैक्सज़ के लिए मेरी माफ़ी। मैं सोचने में बहुत जल्दबाजी कर रहा था कि केवल आपके सुझावों से पूछे जाने वाले सटीक प्रश्न को हल नहीं किया गया है, कि वे बहुत समान परिस्थितियों को हल करने में मदद करते हैं (यहां जवाब हल करता है एक बहुत ही विशिष्ट स्थिति, और केवल इन सभी उत्तरों के संयोजन ने मेरी समस्या हल कर दी। मैंने कोशिश की, लेकिन यह मुझे तब तक नहीं जाने देगा जब तक कि मैं जवाब संपादित नहीं करता, जिसे मैं नहीं करना चाहता।)

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rl_outer" 
    android:layout_width="fill_parent" 
    android:layout_height="50dip" 
    android:background="#FF0000FF"> 

    <Button 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/btn_button1" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:background="#FF00FF00" 
    android:text="&lt;" 
    android:textSize="20sp" 
    android:paddingLeft="40dip"/> 

    <RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rl_inner" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:background="#FFFF00FF"   
    android:layout_centerInParent="true" 
    android:gravity="center">  

    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/tv_text1" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:background="#FF505050" 
     android:textSize="20sp" 
     android:textColor="#FFFFFFFF" 
     android:text="Complaint #" 
     android:gravity="center"/>  

    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/tv_text2" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:background="#FF505050" 
     android:textSize="20sp" 
     android:textColor="#FFFFFFFF" 
     android:layout_toRightOf="@id/tv_text1" 
     android:gravity="center"/> 

    </RelativeLayout> 
</RelativeLayout> 
+1

एंड्रॉइड: layout_centerInParent = "true" चाल है –

8

यहां ब्रेनक्रैश के उत्तर का विस्तार है। यह एक गैर घोंसला वाला विकल्प है जो समूह और तीनों क्षैतिज और लंबवत केंद्रों को केंद्रित करता है। इसके अलावा, यह शीर्ष टेक्स्ट व्यू लेता है और दोनों बटनों पर क्षैतिज रूप से केन्द्रित करता है। अगर वांछित है, तो आप टेक्स्टव्यू के भीतर टेक्स्ट को एंड्रॉइड के साथ केंद्रित कर सकते हैं: गुरुत्वाकर्षण = "केंद्र"। मैंने लेआउट को हाइलाइट करने के लिए मार्जिन, अतिरिक्त रंग भी हटा दिया, और रिलेटिव लेआउट ऊंचाई को fill_parent पर सेट किया। एपीआई 11 पर परीक्षण किया गया।

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:background="@android:color/black" 
    > 
    <TextView 
    android:id="@+id/instructions" 
    android:text="TEST" 
    android:textSize="20sp" 
    android:background="@android:color/darker_gray" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_alignLeft="@+id/undo" 
    android:layout_alignRight="@+id/apply" 
    android:gravity="center" 
    /> 
    <Button 
    android:id="@+id/apply" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="APPLY" 
    android:textSize="20sp" 
    android:layout_below="@id/instructions" 
    /> 
    <Button 
    android:id="@+id/undo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true" 
    android:text="UNDO" 
    android:textSize="20sp" 
    android:layout_toLeftOf="@id/apply" 
    android:layout_below="@id/instructions" 
    /> 
</RelativeLayout> 
संबंधित मुद्दे