我试图以编程方式在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>
我怎么解决这个问题?谢谢大家
答案 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)
您应该尝试marginStart
和marginEnd
。当marginLeft和marginRight不起作用时,它对我有用。