Android:左右边距不能以编程方式一起使用

时间:2016-06-10 07:11:22

标签: android margin android-xml android-relativelayout

我试图以编程方式在relativeLayout中添加边距。我写了代码(如下所述)。但是当我运行它时,只有左边距工作正确(边距不正常)。

我使用以下代码:

 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();
    }
}

设置这样的边距:

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

这是我的布局:

<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>

我怎么解决这个问题?谢谢大家

2 个答案:

答案 0 :(得分:0)

你应该传递密度像素(dp)值rater而不是像素(px)使用这个函数:

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

并在set margin函数中调用它:

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

并且相对布局使用这种方式以编程方式设置边距:

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();

答案 1 :(得分:0)

您应该尝试marginStartmarginEnd。当marginLeft和marginRight不起作用时,它对我有用。