动态加载布局,margin属性无效

  有时候我们写好了一个布局文件的模板,然后在代码里面利用LayoutInflate进行动态加载的时候,我们会发现模板里面原来写好的margin的一些参数全都不起作用,下面举一个例子,比如说我的模板文件如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:layout_marginStart="20dp"
    android:layout_marginEnd="20dp"
    android:layout_marginTop="10dp"
    android:background="@drawable/item_unselected">

    <TextView
        android:id="@+id/reminder_entity_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_marginStart="@dimen/activity_horizontal_margin"
        android:text="Bring Utensil"
        android:textColor="@color/text_black_high"
        android:textSize="@dimen/shortcut_detail_text_size_small"
        android:gravity="center_vertical"/>

    <ImageView
        android:id="@+id/reminder_action_where"
        android:layout_width="@dimen/medium_icon_size"
        android:layout_height="@dimen/medium_icon_size"
        android:layout_marginEnd="@dimen/activity_horizontal_margin"
        android:padding="5dp"
        android:layout_alignParentEnd="true"
        android:scaleType="fitCenter"
        android:src="@drawable/location_black"
        android:visibility="gone"/>

</RelativeLayout>

  就是很简单的一个Relativelayout包住了一个TextView和一个Imageview,然后重点在于Relativelayout我设置了marginStart/End/Top三个margin相关的属性。在MainActivity里面动态加载这个布局文件

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout layout = findViewById(R.id.container);
        for (int i = 0; i < 5; i++){
            RelativeLayout entity = (RelativeLayout) this.getLayoutInflater().inflate(R.layout.reminder_entity_template, null);
            layout.addView(entity);
        }
    }
}

什么鬼?这是什么效果??

反面典型

  查阅资料后发现,原来在加载这个布局的时候只有指定了其父布局,他的margin属性才会生效

将原来的这行代码

RelativeLayout entity = (RelativeLayout) this.getLayoutInflater().inflate(R.layout.reminder_entity_template, null);

改为

RelativeLayout entity = (RelativeLayout) this.getLayoutInflater().inflate(R.layout.reminder_entity_template, layout, false);

然后再试一次,大功告成!

大功告成