Android RelativeLayout प्रोग्रामेटिक रूप से "centerInParent" सेट करें


139

मेरे पास इस तरह एक RelativeLayout है:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip">

    <Button
        android:id="@+id/negativeButton"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:textColor="#ffffff"
        android:layout_alignParentLeft="true"
        android:background="@drawable/black_menu_button"
        android:layout_marginLeft="5dip"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/> 

    <Button
        android:id="@+id/positiveButton"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:textSize="20dip"
        android:textColor="#ffffff"
        android:layout_alignParentRight="true"
        android:background="@drawable/blue_menu_button"
        android:layout_marginRight="5dip"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/>
</RelativeLayout>

मैं प्रोग्राम के positiveButtonरूप में समान प्रभाव के लिए सेट करने में सक्षम होना चाहता हूं :

android:layout_centerInParent="true"

मैं इसे कैसे बना सकते हैं?

जवाबों:


401

पूरी तरह से अप्रयुक्त, लेकिन यह काम करना चाहिए :

View positiveButton = findViewById(R.id.positiveButton);
RelativeLayout.LayoutParams layoutParams = 
    (RelativeLayout.LayoutParams)positiveButton.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
positiveButton.setLayoutParams(layoutParams);

जोड़ने के android:configChanges="orientation|screenSize"अपने मेनिफ़ेस्ट में अपनी गतिविधि के अंदर


5
यह काम किया है, लेकिन केवल Idertet लेआउट के बाद Parsams.addRule (RelativeLayout.ALIGN_PARENT_RIGHT, 0); मूल नियम में केंद्र से पहले। धन्यवाद।
एलिन

9
मैं यह जोड़ना चाहूंगा कि इसने मेरे लिए भी काम किया, लेकिन मुझे लेआउट बदलने पड़े थे। लेआउट के लिए, Pamsams.addRule (RelativeLayout.CENTER_IN_PARENT, -1); मेरी स्थिति में। आपके एप्लिकेशन को "एंकर" फ़ील्ड में एक अलग मूल्य की आवश्यकता हो सकती है।
बेन मैक

7
एंकर फील्ड वैल्यू कुछ भी हो सकता है, लेकिन वर्तमान में सच को दर्शाने के लिए 0 है। स्रोत की तुलना ऐसी है if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_HORIZONTAL] != 0) {जहां 0प्रभावी रूप से मूल्यांकन किया जाता हैfalse
डोरी

2
अनुवर्ती प्रश्न के रूप में किसी को भी पता है कि क्या इस उत्तर में कोड का उपयोग एनिमेशन में किया जा सकता है? उदाहरण के लिए एक केंद्रित स्थिति से एक रिश्तेदार बाईं ओर से छवि चेतन करने के लिए आदि
जॉनी

27
आप बस लेआउट का उपयोग कर सकते हैं। Parsams.addRule (RelativeLayout.CENTER_IN_PARENT), दूसरे पैरामीटर की कोई आवश्यकता नहीं है, जैसा कि आप प्रलेखन
tarmelop

14

रूबेन प्रतिक्रिया से बस एक और स्वाद जोड़ने के लिए, मैं इसे इस शर्त के अनुसार इस नियम को जोड़ने या निकालने के लिए उपयोग करता हूं:

    RelativeLayout.LayoutParams layoutParams =
            (RelativeLayout.LayoutParams) holder.txtGuestName.getLayoutParams();

    if (SOMETHING_THAT_WOULD_LIKE_YOU_TO_CHECK) {
        // if true center text:
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
        holder.txtGuestName.setLayoutParams(layoutParams);
    } else {
        // if false remove center:
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, 0);
        holder.txtGuestName.setLayoutParams(layoutParams);
    }

3
एक नियम को हटाने का सबसे अच्छा तरीका होगा: लेआउटपामर्स.्रेमोवुले (रिलेटिवलाईट। CENTER_IN_PARENT);
जाहिद रशीद 7

5

मैंने के लिए किया है

1. केंद्रसंपर्क

2. केंद्र क्षैतिज

3. केंद्रस्थ

साथ सही और गलत

private void addOrRemoveProperty(View view, int property, boolean flag){
    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
    if(flag){
        layoutParams.addRule(property);
    }else {
        layoutParams.removeRule(property);
    }
    view.setLayoutParams(layoutParams);
}

कैसे कॉल करें विधि:

केंद्रपदार्थ - सत्य

addOrRemoveProperty(mView, RelativeLayout.CENTER_IN_PARENT, true);

केंद्रपदार्थ - असत्य

addOrRemoveProperty(mView, RelativeLayout.CENTER_IN_PARENT, false);

केंद्र-क्षैतिज - true

addOrRemoveProperty(mView, RelativeLayout.CENTER_HORIZONTAL, true);

केंद्र क्षैतिज - असत्य

addOrRemoveProperty(mView, RelativeLayout.CENTER_HORIZONTAL, false);

केंद्रात्मक - सच

addOrRemoveProperty(mView, RelativeLayout.CENTER_VERTICAL, true);

केंद्रात्मक - असत्य

addOrRemoveProperty(mView, RelativeLayout.CENTER_VERTICAL, false);

आशा है कि यह आपकी मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.