2
votes

I have tried to add margins in my relativeLayout programmatically. I have writtern the code (as mentioned below). But when I run it only left margin working correct(margin right is not working).

I am using the following code:

 public static void setMargins (View v, int l, int t, int r, int b) {
    if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(l, t, r, b);
        v.requestLayout();
    }
}

setting margins like this:

setMargins(mainLayout,100,0,100,0);

This is my layout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
>
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <LinearLayout
        android:id="@+id/contact_include_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <include layout="@layout/view_common_header_with_tittle" />
    </LinearLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
    <RelativeLayout
        android:id="@+id/mainLayout"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="@dimen/u_done_action_bottom_margin"
            android:layout_marginRight="@dimen/u_common_margin_left"
            android:layout_marginLeft="@dimen/u_common_margin_left"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/u_widget_height"
                android:id="@+id/showCountryDialog"
                android:background="@drawable/edittext_input_background_not_focus"
                android:layout_marginTop="@dimen/u_card_button_margin_botton">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Choose Country"
                    android:id="@+id/CountryDialogDefaultText"
                    android:textColor="#4d4d4d"
                    android:textSize="@dimen/u_common_text_size"
                    android:layout_centerVertical="true"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    />

                <ImageView
                    android:id="@+id/u_register_third_step_country_image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="@drawable/ic_menu_downarrow_grey"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="@dimen/u_common_text_size"
                    android:visibility="gone"
                    android:layout_alignParentRight="true"
                    />
            </RelativeLayout>


            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/u_common_margin_left"
                android:orientation="horizontal"

                >

                <TextView
                    android:id="@+id/u_call_center_t1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#4d4d4d"
                    android:textSize="@dimen/u_common_text_size"
                    android:text="@string/u_call_center_phone" />

                <TextView
                    android:id="@+id/u_call_center_phone"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="10dp"
                    android:textColor="#4d4d4d"
                    android:textSize="@dimen/u_common_text_size"
                     />
            </LinearLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginTop="@dimen/u_spinner_margin_top"
                >

                <TextView
                    android:id="@+id/u_call_center_t2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#4d4d4d"
                    android:textSize="@dimen/u_common_text_size"
                    android:text="@string/u_call_center_wh" />

                <TextView
                    android:id="@+id/u_call_center_wh"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="10dp"
                    android:textColor="#4d4d4d"
                    android:textSize="@dimen/u_common_text_size" />
            </LinearLayout>




        </LinearLayout>


    </RelativeLayout>
    </ScrollView>
</LinearLayout>

How can i solve this problem? thanks everyone

2
Add following line after the setMargins(mainLayout,100,0,100,0); in your code: yourlayout.setLayoutParams(params);Muhammad Umair

2 Answers

0
votes

You should pass density pixel(dp) value rater than pixel (px) use this function :

public static int dpToPx(int dp) {
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

and call it in set margin function like this :

 setMargins(mainLayout,dpToPx(100,0,dpToPx(100),0);

and for relative layout use this way to set margin programatically :

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.setMargins(0, dpToPx(10), 0, 0);
                v.setLayoutParams(params);
                v.requestLayout();
0
votes

You should try marginStart and marginEnd. It works for me while marginLeft and marginRight are not working.